sustituir solo regulares regular numeros linea inicio expresiones expresion especiales espacio ejemplos caracteres blanco alfanumerico regex sed substitution

solo - regex replace



Cómo hacer que las líneas eliminadas no coincidan con una sustitución (4)

Básicamente quiero hacer esto:

cat file | grep ''<expression>'' | sed ''s/<expression>/<replacement>/g''

sin tener que escribir la expresión dos veces:

cat file | sed ''s/<expression>/<replacement>/g''

¿Hay una manera de decirle a sed que no imprima líneas que no coincidan con la expresión regular en el comando de sustitución?


Digamos que tienes un archivo que contiene el texto que quieres sustituir.

$ cat new.text A B

Si desea cambiar de A a a, lo ideal es que hagamos lo siguiente:

$ sed ''s/A/a/'' new.text a B

Pero si no desea obtener líneas que no se vean afectadas por la sustitución, puede utilizar la combinación de nyp como sigue:

$ sed -n ''s/A/a/p'' new.text a


Esto podría funcionar para usted:

sed ''/<expression>/!d;s//<replacement>/g'' file

O

sed ''s/<expression>/<replacement>/gp;d'' file


Qué tal si:

cat file | sed ''d/<expression>/''

Se eliminarán los patrones coincidentes de la entrada. Por supuesto, esto es lo contrario de lo que quieres, pero ¿quizás puedas hacer una expresión regular opuesta?

No estoy seguro de la sintaxis, solo la usé un par de veces hace un tiempo.


cat file | sed -n ''/<expression>/{s//<replacement>/g;p;}''