我正在尝试使用此命令:
sed -i 's#\{test1\}#test2#' /example/myfile.txt
将{test1}
的实例替换为test2
。
我收到错误:
sed: -e expression #1, char 17: Invalid preceding regular expression
我没有正确地逃脱花括号吗?
答案 0 :(得分:31)
sed -i 's#{test1}#test2#' /example/myfile.txt
您不需要转义{}
答案 1 :(得分:21)
你根本没有逃避花括号。在sed
中,默认正则表达式是BRE,其中\{
和\}
表示范围表达式。由于test1
不是范围,因此您的BRE不正确。
要修复它,你可以删除反斜杠(大括号在BRE中不是特殊的)或保持相同并告诉sed使用ERE(-r
标志与GNU sed,{{1} }标志与BSD / MacOSX sed)。