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; },
答案 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>