愚蠢的sed /正则表达式错误?

时间:2017-02-17 19:56:44

标签: regex bash sed

sed -i.bak -e 's/^\s+({\s+group.+;\s+port.+;)\s+cp.+/ \1 }/g' <file>

我收到了一个错误:

sed: -e expression #1, char 48: invalid reference \1 on ``s' command's RHS

之前我已经多次完成这些sed命令并且没有遇到过这个问题。我偶然发现了一个我错过的微妙的角色模式吗?我在网站上测试了正则表达式,所以我很确定它没问题。我在网上看了很多sed示例,但是找不到任何东西。提前致谢。 要匹配的示例行:

{ group = "127.0.0.1"; port = 222; cpu = 33; },

1 个答案:

答案 0 :(得分:0)

您当前的表达式被解析为BRE(基本正则表达式)。这意味着:

1)括号必须转义为一个捕获组,  2)不支持\s,必须替换为[ \t][[:space:]]  3)+量词应该变成\{1,\},因为它不受支持

您需要传递-r选项(在其他操作系统中,-E可能会执行此工作)以使引擎将其解析为ERE:

sed -i.bak -r -e 's/^\s+({\s+group.+;\s+port.+;)\s+cp.+/ \1 }/g' <file>