¿Cómo hacer que sed omita líneas que no coinciden?

¿Cómo hacer que sed omita líneas que no coinciden?

En el siguiente ejemplo, sedcoincide con líneas que comienzan con an ao a ce imprime el primer carácter de esa línea ( ao 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

Sin embargo, las líneas que no coinciden con el patrón también se imprimen. ¿Cómo le digo sedque debo omitir las líneas que no coinciden con el patrón? Puedo obtener el efecto deseado combinándolo con grep(como sigue), pero me gustaría saber si sedpuedo lograrlo "por sí solo".

$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'

output:
a
c

Respuesta1

Utilice la no-printbandera ( -n) e imprima explícitamente comandos sustitutos exitosos ( s///p):

 sed -n 's/\(a\|c\)./\1/p'

información relacionada