OS X 'RE error: неверное количество повторений' - PullRequest
0 голосов
/ 07 июня 2018

Я пытаюсь заменить следующее (в простейшем виде)

{filedir_9}file.jpg

на

{filedir_7}file.jpg

Используя

sed -i -e 's/(\{filedir_9\})([a-z\-\_0-9]+).jpg/\{filedir_7\}$2$3/g'

Но яПолучение: RE ошибка: неверное количество повторений

1 Ответ

0 голосов
/ 07 июня 2018

Вы можете использовать

sed -i '' -e 's/{filedir_9}\([-a-z_0-9]\{2,\}\)\.jpg/{filedir_7}\1/g'

Обратите внимание, что \{ открывает ограничивающий квантификатор в паттерне POSIX BRE, вам нужно {, чтобы соответствовать литералу {.

Чтобы создать группу захвата в шаблоне BRE POSIX, вам нужно \(...\), а не (...), а внутри замены вы должны использовать \1 для ссылки на значение группы 1.

В шаблонах POSIX экранированные последовательности внутри скобочных выражений не поддерживаются, вы должны поставить - в начале / конце шаблона, экранирование не работает (\ трактуется как литерал \ char).

Кроме того, для сопоставления с точкой необходимо экранировать символ . в шаблоне, если он не экранирован, он соответствует любому символу.

Внутри заменыстрока, вы должны использовать \1 вместо $1 (Perl-подобные заполнители).Обратите внимание, что вы используете заполнители для групп 2 и 3, в то время как ваш шаблон (\{filedir_9\})([a-z\-\_0-9]+).jpg пытается захватить только 2 подстроки, и, таким образом, нет группы 3 (поэтому, нет смысла использовать $3 или \3, он пуст).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...