次の例で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