如何将两条sed替换命令合并为单条命令以提升性能?
如何将两条sed替换命令合并为单条命令以提升性能?
嗨,这个问题提得很到位——合并命令确实能避免重复遍历目录下的所有文件,直接提升处理效率,我给你两种实用的解决方案:
方案一:在sed中执行多个独立替换操作
sed支持通过两种方式在单次调用中执行多个编辑命令:
- 使用
-e选项分隔不同的替换规则
你可以把两条替换命令分别用-e指定,这样sed会依次执行它们:find . -type f | xargs sed -i -e 's/hello_release_demo/hello_demo/g' -e 's/hello_debug_demo/hello_demo/g' - 用分号
;在同一个字符串内分隔替换规则
如果觉得-e有点繁琐,也可以把两个替换命令放在同一个单引号里,用分号隔开:
两种写法效果完全一致,选你觉得顺眼的就行。find . -type f | xargs sed -i 's/hello_release_demo/hello_demo/g; s/hello_debug_demo/hello_demo/g'
方案二:用正则表达式合并相似匹配规则
因为你要替换的两个模式非常相似(都是hello_xxx_demo,其中xxx是release或debug),可以用正则的分支匹配来简化成一个替换命令,这样代码更简洁,效率也更高:
find . -type f | xargs sed -i 's/hello_\(release\|debug\)_demo/hello_demo/g'
这里的\(release\|debug\)是正则的分组分支,意思是匹配release或者debug,整个模式会同时命中hello_release_demo和hello_debug_demo,一次替换就完成两个目标。
小提醒
- 如果你用的是macOS的BSD sed,
-i选项需要指定备份后缀(比如-i .bak会生成备份文件),如果不想备份可以写-i '',命令会变成:find . -type f | xargs sed -i '' 's/hello_\(release\|debug\)_demo/hello_demo/g' - 另外你原来的
find . -type f -name '*'可以简化成find . -type f,因为-name '*'是find的默认匹配规则,写不写都一样。
备注:内容来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

