Uruchamiam kilka poleceń zastępowania jako rdzeń skryptu kolorowania dla maven . Jedno z sed
poleceń używa wyrażenia regularnego, które działa w powłoce, jak omówiono tutaj . Aktualną (nie działającą) implementację można znaleźć tutaj .
Kiedy dołączam jeden z wariantów polecenia do skryptu, zachodzi się inaczej:
Wariant 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Dostosowane do scenariusza:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Błąd: Powłoka wyświetla te same informacje, co gdybym wpisał $ sed
. Dziwne!?
Wariant 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Dostosowane do scenariusza:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Błąd:
sed: -e wyrażenie # 7, char 59: niepoprawne odniesienie \ 1 do prawej strony polecenia `s '
'
i podwójne cudzysłowy "
są traktowane nieco inaczej, szczególnie podczas interpretacji $vars
. Na przykład: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
działa, ale: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
nie.
-i
opcję (edit in place) z-re
, co spowodowało-ire
(tak, że-i
zużywałre
fragment jako jegoSUFFIX
argument, a zatem rozszerzony tryb regex nie był włączony); zmieniając go, aby-i -re
rozwiązać problem.