¿Cuál es la sintaxis correcta para encontrar una subcadena (una cadena que va precedida y seguida por cadenas específicas) que hace que no concuerde con un patrón específico?Sed regex y subcadena de negación
Por ejemplo, yo quiero tomar todas las subcadenas, que empiezan con BEGIN_
, final con _END
y la subcadena en el medio es no igual a FOO
; y reemplace toda la subcadena con el formato "(subcadena interna)". A continuación se correspondería con:
BEGIN_bar_END
->(bar)
BEGIN_buz_END
->(buz)
BEGIN_ihfd8f398IHFf9f39_END
->(ihfd8f398IHFf9f39)
Pero BEGIN_FOO_END
no va a coincidir.
He jugado un poco con lo siguiente, pero parece que no puede encontrar la sintaxis correcta:
sed -e 's/BEGIN_(^FOO)_END/($1)/g'
sed -e 's/BEGIN_([^FOO])_END/($1)/g'
sed -e 's/BEGIN_(?!FOO)_END/($1)/g'
sed -e 's/BEGIN_(!FOO)_END/($1)/g'
sed -e 's/BEGIN_(FOO)!_END/($1)/g'
sed -e 's/BEGIN_!(FOO)_END/($1)/g'
Como nota, cuando se trata de líneas completas, esto se puede lograr usando '': http://www.grymoire.com/Unix/Sed.html#uh-32 – Zenexer