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