pattern - sed regex replace
¿Qué pasa con mi expresión regular anticipada en GNU sed? (3)
Hasta donde sé, sed
no tiene ni mirada hacia adelante ni mirada atrás. Cambie a un lenguaje más potente con sintaxis similar, como perl
.
Esto es lo que estoy haciendo (ejemplo simplificado):
gsed -i -E ''s/^(?!foo)(.*)$/bar/1/'' file.txt
Estoy tratando de poner la bar
en frente de cada línea que no comienza con foo
. Este es el error:
gsed: -e expression #1, char 22: Invalid preceding regular expression
¿Qué pasa?
Utiliza la sintaxis de expresión regular compatible con Perl (PCRE) que no es compatible con GNU sed. Debería reescribir su expresión regular de acuerdo con SED Regular-Expressions o usar Perl en su lugar.
sed -i ''/^foo/! s/^/bar/'' file.txt
-
-i =>
cambiar el archivo en su lugar -
/^foo/! =>
/^foo/! =>
solo realiza la siguiente acción en líneas no(!)
comenzando confoo (^foo)
-
s/^/bar/ =>
cambiar el inicio de la línea a la barra