如何讓 sed 省略不符合的行?

如何讓 sed 省略不符合的行?

在以下範例中,sed匹配以 ana或 a開頭的行c並列印該行的第一個字元 (ac):

$ 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'

相關內容