Ejecuto varios comandos de sustitución como el núcleo de un script de colorize para maven . Uno de los sedcomandos utiliza una expresión regular que funciona para buscar en el shell como se explica aquí . La implementación actual (que no funciona) se puede encontrar aquí .
Cuando incluyo una de las variantes del comando en el script, ocurre un comportamiento diferente:
Variante 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Adaptado al guión:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Error: el shell genera la misma información que si escribiera $ sed. ¿¡Extraño!?
Variante 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Adaptado al guión:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Error:
sed: -e expresión # 7, char 59: referencia inválida \ 1 en el RHS del comando `s '
'y las comillas dobles "se tratan de manera ligeramente diferente, especialmente al interpretar $vars. Por ejemplo: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"funciona, pero: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'no.
-i(opción de editar en el lugar) con-re, lo que resultó en-ire(de modo que-iconsumía elrefragmento comoSUFFIXargumento y, por lo tanto, no se habilitaba el modo de expresión regular extendida); cambiándolo para-i -resolucionar el problema.