Я виконую кілька команд заміни як ядро кольорового сценарію для 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виправити проблему.