Sed находит и заменяет фигурные скобки

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

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

Чтобы заменить экземпляры {test1} на test2.

Я получаю сообщение об ошибке:

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

Я не уверен, что вы избегаете фигурных скобок?

Ответы

Ответ 1

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

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

Ответ 2

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

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