Eseguo diversi comandi di sostituzione come nucleo di uno colorize script for maven. Uno dei comandi sed
utilizza un'espressione regolare che funziona nella shell come discussed here. L'attuale implementazione (non funzionante) può essere trovata here.sed: "riferimento non valido 1 su 's' RHS del comando"
Quando includo una delle varianti del comando sul comportamento diverso script di verifica:
Variante 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Adattato allo script:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Errore: Il lei ll restituisce le stesse informazioni come se scrivessi $ sed
. Strano!?
Variante 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Adattato allo script:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Errore:
sed: -e expression #7, char 59: invalid reference \1 on `s' command's RHS
Nel mio caso avevo combinato una '-i' (opzione Modifica posto in) con '-re', risultante in' -ire' (quindi '-i' stava consumando il frammento' re' come argomento 'SUFFIX' e quindi la modalità regex estesa non veniva abilitata); cambiandolo in '-i -re' è stato risolto il problema. –
Si noti anche che le virgolette singole "" e le virgolette "" sono trattate in modo leggermente diverso, specialmente nell'interpretazione di '$ vars'. Ad esempio:' sudo sh -c "sed -r -i 's/(^. + _supplicant.conf)/\ 1 $ {MTXT}/'/ etc/network/interfaces "' funziona, ma: 'sudo sh -c' sed -r -i" s /(^.+ supplicant.conf)/\ 1 $ {MTXT}/"/ etc/network/interfaces'' no. – not2qubit