使用sed在XML的MEM字段后插入字符串失败,求解决方法
问题分析与解决
你的sed命令失效并将文本加到行尾,核心原因是正则的贪婪匹配:
原命令中的.*MEM="\(.*\)".*里,\(.*\)会贪婪捕获从MEM的闭合引号到该行最后一个引号之间的所有内容,替换时用.*直接覆盖了原行后续内容,导致新文本被移到行尾。
正确的sed命令
基础替换(仅修改MEM字段)
使用[^"]*匹配除引号外的内容,避免贪婪捕获:
sed 's/MEM="\([^"]*\)"/MEM="\1" TEST_TO_INSERT="INSERT"/' file.xml
精准匹配JOB标签行(避免误改其他行)
如果只想修改<JOB>标签的行,可添加行过滤条件:
sed '/<JOB / s/MEM="\([^"]*\)"/MEM="\1" TEST_TO_INSERT="INSERT"/' file.xml
效果验证
执行后,目标行将变为:
<JOB ID="122" ... MEM="C:\Program Files" TEST_TO_INSERT="INSERT" CONF="YES" .....>
注意事项
sed本质是文本工具,若XML结构复杂(比如属性换行、属性顺序多变),建议使用专门的XML处理工具(如xmlstarlet)来保证可靠性。
内容的提问来源于stack exchange,提问作者Luis perez
相关产品推荐
相关产品推荐

