用花括号找到并替换

atd*_*dev 20 sed

我正在尝试使用此命令:

sed -i 's#\{test1\}#test2#' /example/myfile.txt
Run Code Online (Sandbox Code Playgroud)

替换{test1}with的实例test2.

我收到错误:

sed: -e expression #1, char 17: Invalid preceding regular expression
Run Code Online (Sandbox Code Playgroud)

我没有正确地逃脱花括号吗?

kev*_*kev 32

sed -i 's#{test1}#test2#' /example/myfile.txt
Run Code Online (Sandbox Code Playgroud)

你不需要逃避 {}


Mic*_*ber 22

你根本没有逃脱花括号.在sed,默认正则表达式是BRE,其中\{\}表示范围表达式.由于test1不是范围,因此您的BRE不正确.

要修复它,你可以删除反斜杠(大括号在BRE中不是特殊的)或保持相同并告诉sed使用ERE(-r带有GNU sed的-E标志,带有BSD/MacOSX sed的标志).

  • TIL:BRE:基本正则表达式,ERE:扩展正则表达式;直到:今天我学到了:) (2认同)