Eu executo vários comandos de substituição como o núcleo de um script colorize para maven . Um dos sed
comandos usa uma expressão regular que funciona e se encontra no shell, conforme discutido aqui . A implementação atual (não funcionando) pode ser encontrada aqui .
Quando incluo uma das variantes do comando no script, ocorre um comportamento diferente:
Variante 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Adaptado ao roteiro:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Erro: o shell exibe as mesmas informações que se eu digitaria $ sed
. Estranho!?
Variante 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Adaptado ao roteiro:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Erro:
sed: -e expressão # 7, char 59: referência inválida \ 1 no RHS do comando `s '
'
e duplas "
são tratadas de maneira ligeiramente diferente, especialmente na interpretação $vars
. Por exemplo: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
funciona, mas: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
não.
-i
(opção editar no local) com-re
, resultando em-ire
(de modo que-i
estava consumindo ore
fragmento como seuSUFFIX
argumento e, portanto, o modo regex estendido não estava sendo ativado); alterá-lo para-i -re
corrigir o problema.