sed搜索并替换xml文件中的文本

时间:2018-11-13 15:50:30

标签: xml sed

我正在努力表达sed。

cat sample.xml:

<pro path="broad" name="cd/broad" remote="bit" rev="5e2b78f768dc8dd6a7d1a1153942684993b40430" groups="app" />

注意:rev也可以等于“ master”或“ commitid”

表达:

sed -i "s/^\([[:space:]]*\)\(<pro\)\([[:space:]]\)\(path=.*\)\(rev=\)\([0-9a-f]{40}\)\([[:space:]]\)\(.*\)/\1\2\3\4\5blah\7/g" sample.xml

我想将version = 5e2b78f768dc8dd6a7d1a1153942684993b40430更改为rev = blah

我的输出应该是:

<pro path="broad" name="cd/broad" remote="bit" rev="blah" branch="master" groups="apps" />

有人可以帮我修复我的sed表达吗?

1 个答案:

答案 0 :(得分:0)

前进的方式是利用XML分析器,例如xmlstarlet

xmlstarlet ed --update '//pro/@rev' --value "blah" xmlfile.xml

请注意,由于我们没有清晰的完整XML图片,因此可能无法正常工作。

备注:如果要添加branch属性,可以一次完成:

xmlstarlet ed --update '//pro/@rev' --value "blah" \
              --insert '//pro' --type attr --name "branch" --value "master" xmlfile.xml