sed 查找并替换为大括号

问题描述 投票:0回答:2

我正在尝试使用此命令:

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

{test1}
替换
test2
的实例。

我收到错误:

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

我没有正确转义大括号吗?

sed
2个回答
51
投票
sed -i 's#{test1}#test2#' /example/myfile.txt

你不需要逃避

{}


30
投票

你根本没有逃脱大括号。在

sed
中,默认的正则表达式是 BRE,其中
\{
\}
表示范围表达式。由于
test1
不是范围,因此您的 BRE 不正确。

要修复它,您可以删除反斜杠(大括号在 BRE 中并不特殊)或保持不变并告诉 sed 使用 ERE(GNU sed 为

-r
标志,BSD/MacOSX sed 为
-E
标志) .

© www.soinside.com 2019 - 2024. All rights reserved.