sed使用花括号进行查找和替换

33

我想使用这个命令:

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

{test1}的实例替换为test2

我收到以下错误:

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

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


1
嗯...我删掉了反斜杠,看起来它正常工作。 - atdev
2个回答

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

您无需转义{}


28

你没有对花括号进行转义。在 sed 中, 默认的正则表达式是 BRE(基本正则表达式),其中 \{\} 表示一个范围表达式。由于 test1 不是一个范围,所以你的BRE是不正确的。

要修复它,你可以删除反斜杠(BRE中花括号不是特殊字符),或者保持不变,并告诉sed使用 EREs(GNU sed使用-r 标志,BSD/MacOSX sed使用-E标志)。


TIL BRE ERE。在“sed”领域中,BRE非常方便。 - ericsoco
4
BRE表示基本正则表达式,ERE表示扩展正则表达式;TIL表示今天我学到了 :) - Generic Ratzlaugh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接