ошибка 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"