En el siguiente ejemplo, sed
coincide con las líneas que comienzan con una 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 omita 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í mismo".
$ echo "ag
bh
ci
dj
ek
fl" | grep '[ac]' | sed 's/\(a\|c\)./\1/'
output:
a
c
regex
sed
bash-scripting
freitass
fuente
fuente
Respuestas:
Use la
no-print
bandera (-n
) e imprima explícitamente los comandos sustitutos exitosos (s///p
):fuente