我基本上想要这样做:
cat file | grep '<expression>' | sed 's/<expression>/<replacement>/g'
无需编写表达式两次:
cat file | sed 's/<expression>/<replacement>/g'
有没有办法告诉sed不要打印与substitute命令中的正则表达式不匹配的行?
答案 0 :(得分:25)
假设您有一个包含要替换的文本的文件。
$ cat new.text
A
B
如果您想将A更改为a,那么理想情况下我们会执行以下操作 -
$ sed 's/A/a/' new.text
a
B
但如果您不希望获得不受替换影响的行,那么您可以使用n和p的组合,如下所示 -
$ sed -n 's/A/a/p' new.text
a
答案 1 :(得分:17)
这可能对您有用:
sed '/<expression>/!d;s//<replacement>/g' file
或者
sed 's/<expression>/<replacement>/gp;d' file
答案 2 :(得分:4)
cat file | sed -n '/<expression>/{s//<replacement>/g;p;}'
答案 3 :(得分:-2)
怎么样:
cat file | sed 'd/<expression>/'
将从输入中删除匹配的模式。当然,这与你想要的相反,但也许你可以做出相反的正则表达式?
请注意,我不完全确定语法,不久前曾使用过几次。