найти и заменить с помощью фигурных скобок - PullRequest
20 голосов
/ 09 февраля 2012

Я пытаюсь использовать эту команду:

sed -i 's#\{test1\}#test2#' /example/myfile.txt

Для замены экземпляров {test1} на test2.

Я получаю ошибку:

sed: -e expression #1, char 17: Invalid preceding regular expression

Правильно ли я избегаю фигурных скобок?

Ответы [ 2 ]

32 голосов
/ 09 февраля 2012
sed -i 's#{test1}#test2#' /example/myfile.txt

Вам не нужно бежать {}

22 голосов
/ 09 февраля 2012

Вы вообще не избегаете фигурных скобок. В sed регулярными выражениями по умолчанию являются BRE, где \{ и \} указывают выражение диапазона. Поскольку test1 не является диапазоном, ваш BRE неверен.

Чтобы исправить это, вы можете либо удалить обратную косую черту (фигурные скобки не являются особенными в BRE), либо оставить ее прежней, и указать sed использовать ERE (-r флаг с GNU sed, -E флаг с BSD / MacOSX СЕПГ).

...