¿Qué pasa con mi expresión regular anticipada en GNU sed?

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?

Hasta donde sé, sed no tiene ni mirada hacia adelante ni mirada atrás. Cambie a un lenguaje más potente con syntax similar, como perl .

 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 con foo (^foo)
  • s/^/bar/ => cambiar el inicio de la línea a la barra

Utiliza la syntax 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.