sed + 如何最小化 sed 管道并一次性完成 sed

sed + 如何最小化 sed 管道并一次性完成 sed

是否可以使用一个 sed 命令执行以下操作,而无需另外两个 sed 管道?

sed s"/obbama/trump/" | sed s'/"//g' | sed s'/://g' 

这里描述的 sed 需要用 trump 替换单词 obbama 并删除字符 ' " ' 和 ':'

答案1

来自POSIX sed 手册页

脚本应从脚本操作数字符串或选项参数的组合中获取-e 脚本-f 脚本文件选项。

第一个(“脚本操作数字符串”)本质上是由此处的另一个答案(分号分隔)处理的。

-e

$ sed -e "s/obbama/trump/" -e 's/"//g' -e 's/://g' 

-f

$ cat sed-script
s/obbama/trump/
s/"//g
s/://g
$ sed -f sed-script

顺便说一句,更传统的做法是将“s”放在我在示例中完成的每个替换指令的引号内-e

答案2

sed是一种脚本语言,与 sh 或 awk 或 perl 或任何其他语言一样,允许在脚本中使用多个语句。您可以使用分号;或换行符分隔每个 sed 语句。例如

sed 's/obbama/trump/; s/"//g; s/://g'

或者

sed 's/obbama/trump/
s/"//g
s/://g'

后面的空格字符;是可选的,但 IMO 使 sed 脚本更具可读性。

相关内容