Sed Bash 脚本只运行 sed 的第一行

吉米冈萨雷斯

我的bash脚本只运行sed. 我用来运行它的命令:

sed -f sedhw.bash thesbians.txt

的内容 sedhw.bash

s/[0-9]*//g
s/1908/---/g; s/1895/---/g; s/1903/---/g
s/,.*//g
s/^[^"]*"/"/
s/,[^",]*"/,/;s/"//g

我需要它一次运行文件中的每个命令一次,给我 5 个不同的输出而不是一个输出。

文本文件看起来像这样

Chase,Cornelius 1943 "Chevy"
Davis,Ruth      1908 "Bette"
Keaton,Joseph   1895 "Buster"
Stone,Emily     1988 "Emma"
Lee,Shelton     1957 "Spike"
Reynolds,Mary   1932 "Debbie"
Crosby,Harry    1903 "Bing"
Fey,Stamatina   1970 "Tina"
马克格拉夫

正如@roaima@kusalananda已经评论过的那样,您sedhw.bash是一个 sedfile。

sed -f sedhw.bash thesbians.txt 将针对文件 thesbians.txt 运行 sedhw.bash 中的所有 sed 命令

你想要做什么,而不是为循环遍历sedhw.bash的线条和执行各行产生新的输出文件:

#!/bin/bash
while read num line; do 
     sed "$line" thesbians.txt > output.${num}.txt
done < <(nl sedhw.bash)

解释一下:nl sedhw.bash将编号您的命令和“制表符分隔”行号和命令:

     1  s/[0-9]*//g
     2  s/1908/---/g; s/1895/---/g; s/1903/---/g
     3  s/,.*//g
     4  s/^[^"]*"/"/
     5  s/,[^",]*"/,/;s/"//g

<(...) 将命令输出作为文件显示在 while 循环中。

循环将逐行输入这个“文件”,<并将制表符分隔的字段读入变量“num”和“line”。

sed 执行命令 "$line" 并将其写入到 sedhw.bash 中以相应行编号的文件中。

结果

$ for item in output*; do echo; echo "=== $item ==="; cat $item ; done 

=== output.1.txt ===
Chase,Cornelius "Chevy"
Davis,Ruth      "Bette"
Keaton,Joseph   "Buster"
Stone,Emily     "Emma"
Lee,Shelton     "Spike"
Reynolds,Mary   "Debbie"
Crosby,Harry    "Bing"
Fey,Stamatina   "Tina"

=== output.2.txt ===
Chase,Cornelius 1943 "Chevy"
Davis,Ruth      ---  "Bette"
Keaton,Joseph   ---  "Buster"
Stone,Emily     1988 "Emma"
Lee,Shelton     1957 "Spike"
Reynolds,Mary   1932 "Debbie"
Crosby,Harry    ---  "Bing"
Fey,Stamatina   1970 "Tina"

=== output.3.txt ===
Chase
Davis
Keaton
Stone
Lee
Reynolds
Crosby
Fey

=== output.4.txt ===
"Chevy"
"Bette"
"Buster"
"Emma"
"Spike"
"Debbie"
"Bing"
"Tina"

=== output.5.txt ===
Chase,Chevy
Davis,Bette
Keaton,Buster
Stone,Emma
Lee,Spike
Reynolds,Debbie
Crosby,Bing
Fey,Tina

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash脚本并引用SED

来自分类Dev

Bash脚本sed

来自分类Dev

sed从php第一行删除

来自分类Dev

sed无法从bash脚本中运行

来自分类Dev

无法在 Bash 脚本上运行 sed 命令

来自分类Dev

sed无法使用bash脚本注释文件中的一行

来自分类Dev

Sed用法:添加脚本第一行中缺少的shebang

来自分类Dev

sed bash变量删除文件中的一行

来自分类Dev

bash - 读取一行,使用 sed/awk 拆分元组

来自分类Dev

Bash,sed,删除每个循环的最后一行

来自分类Dev

找到与sed匹配后如何只追加一行?

来自分类Dev

bash脚本中使用以下sed行的含义

来自分类Dev

bash脚本中使用的以下sed行的含义

来自分类Dev

使用sed命令从bash脚本中的文件中删除行

来自分类Dev

使用sed打印每个匹配模式的第一行

来自分类Dev

使用sed删除每个csv文件的第一行

来自分类Dev

使用`sed`打印和删除文件的第一行

来自分类Dev

如何使用sed删除文件的第一行?

来自分类Dev

如何使用sed替换第一行?

来自分类Dev

如何使用sed显示第一行和最后一行之间的行?

来自分类Dev

Bash转义脚本和sed捕获组

来自分类Dev

sed抱怨bash脚本中的数字

来自分类Dev

Bash脚本sed用法导致ZSH问题

来自分类Dev

在bash脚本中使用sed替换多行

来自分类Dev

Bash脚本查找/ SED无法正常工作

来自分类Dev

BASH脚本,在sed中正确引用变量?

来自分类Dev

在bash脚本中执行sed命令

来自分类Dev

sed抱怨bash脚本中的数字

来自分类Dev

Bash脚本sed用法导致ZSH问题