sed正则替换报错:Invalid content of \{\},求问题排查与解决
sed正则替换报错排查与修复
问题重现
执行以下sed命令时抛出语法错误:
sed -i -E 's/(={|=")([^}]+)(}"|})/\2/g' "$filename"
错误信息:
sed: -e expression #1, char 27: Invalid content of \{\}
目标是匹配="{123}"或={text}这类结构,提取并替换为大括号内的内容。
问题根源
你使用的是BSD sed(比如macOS系统默认的sed版本),它的扩展正则语法和regex验证工具默认的PCRE引擎存在差异。在BSD sed的字符集表达式中,}属于特殊字符,必须转义才能被当作普通字符处理,否则会被误判为量词语法的一部分,触发语法错误。
修复方案
适配BSD sed的修正命令
将字符集里的}转义即可:
sed -i -E 's/(={|=")([^\}]+)(}"|})/\2/g' "$filename"
跨平台兼容写法
如果需要同时兼容GNU sed(Linux系统默认版本)和BSD sed,需调整-i参数的写法(BSD sed要求-i指定备份后缀,空字符串表示不创建备份):
sed -i '' -E 's/(={|=")([^\}]+)(}"|})/\2/g' "$filename"
GNU sed也能识别这种写法,不会出现兼容性问题。
内容的提问来源于stack exchange,提问作者ijkML
相关产品推荐
相关产品推荐

