繁体   English   中英

如何使sed删除与替换不匹配的行

[英]How to make sed remove lines not matched by a substitution

我基本上想要这样做:

cat file | grep '<expression>' | sed 's/<expression>/<replacement>/g'

无需两次写表达式:

cat file | sed 's/<expression>/<replacement>/g'

有没有办法告诉sed不要打印与substitute命令中的正则表达式不匹配的行?

假设您有一个包含要替换的文本的文件。

$ 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

这可能对你有用:

sed '/<expression>/!d;s//<replacement>/g' file

要么

sed 's/<expression>/<replacement>/gp;d' file
cat file | sed -n '/<expression>/{s//<replacement>/g;p;}'

怎么样:

cat file | sed 'd/<expression>/'

将从输入中删除匹配模式。 当然,这与你想要的相反,但也许你可以做出相反的正则表达式?

请注意,我不完全确定语法,前一段时间只使用过几次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM