ошибка sed: "недопустимая ссылка 1 на RHS команды' s"

я запускаю несколько команд подстановки в качестве ядра раскрасить скрипт для maven. Один из sed команды используют регулярное выражение, которое работает найти в оболочке как здесь обсуждается. Текущая (не работающая) реализация может быть найдена здесь.

когда я включаю один из вариантов команды в скрипт разному происходит:

вариант 1:

$ sed -re "s/([a-zA-Z0-9./ :-]+)//g"

адаптирована под скрипт:

-re "s/WARNING: ([a-zA-Z0-9./ :-]+)/${warn}WARNING: ${c_end}/g" 

ошибка: оболочка выводит ту же информацию, что и если бы я набрал $ sed. Странно!?


Вариант 2:

$ sed -e "s/([a-zA-Z0-9./ :-]+)//g"

адаптирована под скрипт:

-e "s/WARNING: ([a-zA-Z0-9./ :-]+)/${warn}WARNING: ${c_end}/g" 

ошибка:

sed: - e выражение #7, char 59: недопустимая ссылка 1 на команду ' s RHS

3 ответов


Не нужно на самом деле захватить, да? т. е. для варианта 2:

-r -e "s/WARNING: (\([a-zA-Z0-9./\ :-]\+\))/${warn}WARNING: ${c_end}/g" \

(Примечание: непроверено)

без аргумента-r обратные ссылки (например, \1) не будут работать.


эта ошибка является общей для скобок, которые не экранируются. Избежать их и попытаться снова.


например:

/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n(.)//g

должен быть экранирован с обратными косыми чертами перед каждой скобкой:

/^$/b
:loop
$!{
N
/\n$/!b loop
}
s/\n\(.\)//g

вам нужно избежать / после .

sed -e "s/\([a-zA-Z0-9.\/\ :-]\+\)//g"

или если вы не хотите беспокоиться о побеге, используйте |

sed -e "s|\([a-zA-Z0-9./\ :-]\+\)||g"

EDIT:

sed -e "s|WARNING: \([a-zA-Z0-9.-/\ :]+\)|${warn}WARNING: ${c_end}|g"