我正在努力表达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表达吗?
答案 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