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"