Ich führe mehrere Substitutionsbefehle als Kern eines Kolorierungsskripts für Maven aus . Einer der sed
Befehle verwendet einen regulären Ausdruck, der wie hier beschrieben in der Shell gefunden wird . Die aktuelle (nicht funktionierende) Implementierung finden Sie hier .
Wenn ich eine der Varianten des Befehls in das Skript einbinde, tritt ein anderes Verhalten auf:
Variante 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
An das Skript angepasst:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Fehler: Die Shell gibt die gleichen Informationen aus, als würde ich tippen $ sed
. Seltsam!?
Variante 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
An das Skript angepasst:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Error:
sed: -e Ausdruck # 7, char 59: ungültige Referenz \ 1 auf der RHS des Befehls 's'
'
und doppelte Anführungszeichen "
leicht unterschiedlich behandelt werden, insbesondere beim Dolmetschen $vars
. Zum Beispiel: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
funktioniert, aber: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
nicht.
-i
(Option zum Bearbeiten an Ort und Stelle) mit kombiniert-re
, was dazu führte-ire
(dass-i
dasre
Fragment alsSUFFIX
Argument verwendet wurde und daher der erweiterte Regex-Modus nicht aktiviert wurde). Ändern Sie es, um-i -re
das Problem zu beheben.