sed使用含多分支的分组正则表达式时替换失效,请求排查解决
sed多分支正则替换失效的解决办法
你的问题出在BSD sed的正则语法兼容性上——从-i ''的写法能判断你用的是macOS自带的BSD sed,它默认使用基础正则表达式(BRE),而你写的(feature|bug|security)是扩展正则(ERE)的语法,BRE里|和()都不具备分支、分组功能,必须转义或者切换到扩展正则模式才能生效。
两种解决方式:
方式1:转义基础正则里的特殊字符
把分组括号和分支符都加上反斜杠转义,命令改成:
sed -i '' 's/^\(feature\|bug\|security\)/replacement/g' change.md
方式2:启用扩展正则模式
添加-E选项直接使用扩展正则语法,无需转义:
sed -i '' -E 's/^(feature|bug|security)/replacement/g' change.md
测试你的目标文件,执行任意一个命令后,所有行首的feature、bug都会被替换成replacement,比如feature:foo会变成replacement:foo,bug: bar变成replacement: bar。
内容的提问来源于stack exchange,提问作者mfaani
相关产品推荐
相关产品推荐

