Я виконую кілька команд заміни як ядро кольорового сценарію для maven . Одна з sed
команд використовує регулярний вираз, який працює в командній оболонці, як обговорювалося тут . Поточну (не працює) реалізацію можна знайти тут .
Коли я включаю один із варіантів команди в сценарій, відбувається інша поведінка:
Варіант 1:
$ sed -re "s/([a-zA-Z0-9./\\ :-]+)/\1/g"
Адаптовано до сценарію:
-re "s/WARNING: ([a-zA-Z0-9./\\ :-]+)/${warn}WARNING: \1${c_end}/g" \
Помилка: оболонка виводить ту саму інформацію, як і я $ sed
. Дивно !?
Варіант 2:
$ sed -e "s/\([a-zA-Z0-9./\\ :-]\+\)/\1/g"
Адаптовано до сценарію:
-e "s/WARNING: \([a-zA-Z0-9./\\ :-]\+\)/${warn}WARNING: \1${c_end}/g" \
Помилка:
sed: -e вираз №7, char 59: невірне посилання \ 1 на RHS команди `s '
'
і подвійних лапок "
трактуються дещо по-різному, особливо при тлумаченні $vars
. Наприклад: sudo sh -c "sed -r -i 's/(^.+_supplicant.conf)/\1${MTXT}/' /etc/network/interfaces"
працює, але: sudo sh -c 'sed -r -i "s/(^.+_supplicant.conf)/\1${MTXT}/" /etc/network/interfaces'
ні.
-i
(редагувати на місці варіант) з-re
, в результаті чого-ire
(таким чином, що-i
споживавre
фрагмент як йогоSUFFIX
аргумент, а значить, розширений режим регулярного вираження не був включений); змінивши її, щоб-i -re
виправити проблему.