
En el siguiente ejemplo, sed
coincide con líneas que comienzan con an a
o a c
e imprime el primer carácter de esa línea ( a
o 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 sed
que 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 sed
puedo 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-print
bandera ( -n
) e imprima explícitamente comandos sustitutos exitosos ( s///p
):
sed -n 's/\(a\|c\)./\1/p'