Uruchamiam kilka poleceń zastępowania jako rdzeń colorize script for maven. Jedna z komend sed
używa wyrażeń regularnych, które działają w powłoce jako discussed here. Bieżącą (nie działającą) implementację można znaleźć pod adresem here.Błąd sed: "Niepoprawny odnośnik 1 na komendzie RHS polecenia" s '"
Kiedy to jeden z wariantów polecenia do skryptu różnych zachowań następuje:
Wariant 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
dostosowany do skryptu:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Błąd: Ona Wyświetli te same informacje, co gdybym wpisał $ sed
. Dziwne!?
Wariant 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
dostosowany do skryptu:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Błąd:
sed: -e expression #7, char 59: invalid reference \1 on `s' command's RHS
W moim przypadku miałem połączeniu z '-i' (zmienił w opcji miejsce) z '-re', w wyniku czego powstanie' -ire' (tak, że '-i' pochłaniało fragment' re' jako jego argument 'SUFFIX', a zatem rozszerzony tryb regex nie był włączony); zmiana go na '-i -re' rozwiązała problem. –
Należy również zauważyć, że pojedyncze cudzysłowy '' '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'' does not. – not2qubit