Вы можете использовать
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
, он пуст).