如何用Perl实现多文件中保留首个匹配项替换其余所有匹配内容
调整后的Perl命令
perl -pi -w -e 's/THING/++$c == 1 ? $& : "SOMETHING_ELSE"/ge; if (eof) { $c = 0 }' ./src/**/*.py
改动说明
- 新增
e修饰符:让替换规则中的表达式作为可执行Perl代码处理,支持自定义判断逻辑 - 引入匹配计数器
$c:首次匹配到目标字符串时++$c等于1,直接返回原匹配内容$&保留第一个匹配项,后续所有匹配都会替换为指定的新字符串 - 新增文件结束重置逻辑:每个文件处理完成后自动清零计数器,保证每个文件的第一个匹配项都能独立保留,不会出现跨文件计数的问题
注意事项
如果执行时提示./src/**/*.py匹配不到文件,说明当前Shell默认未开启递归匹配,执行命令前先运行shopt -s globstar开启globstar功能即可。
内容的提问来源于stack exchange,提问作者jdesilvio
相关产品推荐
相关产品推荐

