Linux正则匹配项加下划线与XML文件UUID前缀添下划线技术问询
给XML文件中的UUID批量添加前缀下划线
我来帮你解决这个给匹配到的UUID添加前缀下划线的问题,结合你已经用ag定位UUID的情况,这里有几个高效的Linux命令行方案:
方案一:直接用sed批量处理所有XML文件
如果需要处理目录下所有XML文件(不管是否包含UUID),可以用find配合sed完成批量替换:
find . -type f -name "*.xml" -exec sed -i.bak -r 's/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/_\1/g' {} +
命令解释:
find . -type f -name "*.xml":遍历当前目录及子目录下所有XML文件-i.bak:让sed直接修改文件,并将原文件备份为.bak后缀(如果不需要备份,直接用-i即可)-r:启用扩展正则表达式,这样正则里的大括号{}不用转义,更易读s/([0-9a-f]{8}-...)/_\1/g:用捕获组匹配UUID格式的字符串,替换为_加上原匹配内容(\1代表第一个捕获组的内容),g表示行内全局匹配
方案二:结合ag过滤仅包含UUID的XML文件
如果你只想处理确实包含UUID的XML文件(避免无意义的文件操作),可以用ag先筛选出目标文件,再用sed替换:
ag -l '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}' --xml | xargs sed -i.bak -r 's/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/_\1/g'
命令解释:
ag -l ...:-l选项让ag只输出匹配到UUID的文件名,--xml限定只搜索XML文件xargs:将ag输出的文件名列表传递给sed,实现批量处理
验证替换效果
在执行批量替换前,建议先对单个测试文件验证替换逻辑,避免误操作:
sed -r 's/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})/_\1/g' test.xml
这个命令会直接在终端输出替换后的内容,你可以确认是否符合预期(比如将bpmnElement="627b6548-aa19-47c6-a87c-31017810a934-_jbpm-unique-3490"变成bpmnElement="_627b6548-aa19-47c6-a87c-31017810a934-_jbpm-unique-3490")。
内容的提问来源于stack exchange,提问作者user3139545
相关产品推荐
相关产品推荐

