如何让 sed 省略不匹配的行?

如何让 sed 省略不匹配的行?

在以下示例中,匹配以或 ased开头的行并打印该行的第一个字符(或):acac

$ echo "ag
bh
ci
dj
ek
fl" | sed 's/\(a\|c\)./\1/' # Matches lines starting with 'a' or 'c'.

output:
a
bh
c
dj
ek
fl

但是,与模式不匹配的行也会被打印出来。我该如何告诉sed忽略与模式不匹配的行?我可以通过将其与grep(如下所示)结合来获得所需的效果,但我想知道是否sed可以“单独”实现该效果。

$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'

output:
a
c

答案1

使用no-print标志(-n)并明确打印成功的替换命令(s///p):

 sed -n 's/\(a\|c\)./\1/p'

相关内容