给定一个由以下行组成的xml文件:
<dependency field="no_change" name="test" conf="blahblah"/>
<dependency field="to_be_picked_up" name="test" conf="blahREPLACE_ME"/>
我希望能够识别字段值等于 to_be_picked_up 的行(可以是除特定字符串之外的任何内容,例如 no_change )和将字符串 REPLACE_ME 替换为特定字符串。
我已经使用以下命令进行了一些行级更改,但我不知道如何编写逻辑脚本来替换 REPLACE_ME 的逻辑只能在字段值可以分开的行中从to_be_picked_up中找到conf =&#34;&#34;中的变化。
sed -e 's/<dependency \(.*\)\(\.*\)>/\<dependency \1\/\>/'
答案 0 :(得分:1)
不要使用sed编辑XML。使用支持XML的工具。例如,在xsh中,我碰巧维护了一个基于libxml的工具,你可以编写
open file.xml ;
for //dependency[@field="to_be_picked_up"]/@conf
set . xsh:subst(., 'REPLACE_ME', 'RESULT') ;
save :b ;
答案 1 :(得分:0)
sed '/field="no_change"/!s/REPLACE_ME/whatever/'
使用xmlstarlet
,它将是:
xmlstarlet ed -u '//dependency[@field!="no_change"]/@conf' -x 'concat(substring-before(.,"REPLACE_ME"), "whatever", substring-after(., "REPLACE_ME"))'