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

Rop*_*pez 23 regex sed substitution

我基本上想要这样做:

cat file | grep '<expression>' | sed 's/<expression>/<replacement>/g'
Run Code Online (Sandbox Code Playgroud)

无需两次写表达式:

cat file | sed 's/<expression>/<replacement>/g'
Run Code Online (Sandbox Code Playgroud)

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

jay*_*ngh 25

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

$ cat new.text 
A
B
Run Code Online (Sandbox Code Playgroud)

如果您想将A更改为a,那么理想情况下我们会执行以下操作 -

$ sed 's/A/a/' new.text 
a
B
Run Code Online (Sandbox Code Playgroud)

但是如果你不希望获得不受替换影响的行,那么你可以使用n和p的组合,如下所示 -

$ sed -n 's/A/a/p' new.text 
a
Run Code Online (Sandbox Code Playgroud)


pot*_*ong 17

这可能对你有用:

sed '/<expression>/!d;s//<replacement>/g' file
Run Code Online (Sandbox Code Playgroud)

要么

sed 's/<expression>/<replacement>/gp;d' file
Run Code Online (Sandbox Code Playgroud)