sedが一致しない行を省略する方法は?


8

次の例でsedは、aまたはで始まる行に一致し、cその行の最初の文字(aまたはc)を出力します。

$ 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

本当に知りたいことは問題ではありませんが、パターンは^で始まる必要があるため、行の先頭にアンカーされます。コード化されているように、最後の文字でない限り、行のどこにあるaまたはcにも一致します。
Joe

回答:


12

no-printフラグ(-n)を使用して、成功した代替コマンド(s///p)を明示的に出力します。

 sed -n 's/\(a\|c\)./\1/p'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.