with substitute regular pattern online regex sed substitution

regex - substitute - error de sed: "referencia inválida / 1 en` s ''RHS del comando "



sed substitute (3)

¿No necesitas capturar para que funcione? es decir, para la variante 2:

-r -e "s/WARNING: (/([a-zA-Z0-9./// :-]/+/))/${warn}WARNING: /1${c_end}/g" /

(Nota: no probado)

Sin el argumento -r atrás, las referencias (como / 1) no funcionarán.

Ejecuto varios comandos de sustitución como el núcleo de un script de color para maven . Uno de los comandos sed usa una expresión regular que funciona en el shell como se explica aquí . La implementación actual (que no funciona) se puede encontrar here .

Cuando incluyo una de las variantes del comando en el script, se produce un comportamiento diferente:

Variante 1:

$ sed -re "s/([a-zA-Z0-9./// :-]+)//1/g"

Adaptado al guion:

-re "s/WARNING: ([a-zA-Z0-9./// :-]+)/${warn}WARNING: /1${c_end}/g" /

Error: el shell genera la misma información que si $ sed . ¿¡Extraño!?

Variante 2:

$ sed -e "s//([a-zA-Z0-9./// :-]/+/)//1/g"

Adaptado al guion:

-e "s/WARNING: /([a-zA-Z0-9./// :-]/+/)/${warn}WARNING: /1${c_end}/g" /

Error:

sed: -e expresión # 7, char 59: referencia no válida / 1 en el comando `s ''RHS


Este error es común para paréntesis que no son escapados. Escapelos y vuelva a intentarlo.

Por ejemplo:

/^$/b :loop $!{ N //n$/!b loop } s//n(.)//1/g

Debe escaparse con barras diagonales inversas antes de cada paréntesis:

/^$/b :loop $!{ N //n$/!b loop } s//n/(./)//1/g


Necesitas escapar del / después del .

sed -e "s//([a-zA-Z0-9.//// :-]/+/)//1/g"

O si no quieres preocuparte por escapar, usa |

sed -e "s|/([a-zA-Z0-9./// :-]/+/)|/1|g"

EDITAR:

sed -e "s|WARNING: /([a-zA-Z0-9.-/// :]+/)|${warn}WARNING: /1${c_end}|g"