sed で一致しない行を省略するにはどうすればよいですか?

sed で一致しない行を省略するにはどうすればよいですか?

次の例では、またはsedで始まる行に一致し、その行の最初の文字 (または) を出力します。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'

関連情報