Ejecuto varios comandos de sustitución como el núcleo de un script de colorize para maven . Uno de los sed
comandos 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-i
consumía elre
fragmento comoSUFFIX
argumento y, por lo tanto, no se habilitaba el modo de expresión regular extendida); cambiándolo para-i -re
solucionar el problema.