J'exécute plusieurs commandes de substitution au cœur d'un script colorize pour maven . L'une des sed
commandes utilise une expression régulière qui fonctionne dans le shell comme indiqué ici . L'implémentation actuelle (qui ne fonctionne pas) peut être trouvée ici .
Lorsque j'inclus l'une des variantes de la commande dans le script, un comportement différent se produit:
Variante 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Adapté au script:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Erreur: le shell génère les mêmes informations que si je tapais $ sed
. Étrange!?
Variante 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Adapté au script:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Erreur:
sed: -e expression # 7, char 59: référence \ 1 invalide sur le RHS de la commande `s '
'
et doubles "
sont traités légèrement différemment, en particulier lors de l'interprétation $vars
. Par exemple: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
fonctionne, mais: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
ne fonctionne pas.
-i
(option d'édition sur place) avec-re
, résultant en-ire
(ce qui-i
consommait lere
fragment commeSUFFIX
argument et donc le mode regex étendu n'était pas activé); le changer pour-i -re
résoudre le problème.