用于搜索和替换xml文件中的文本的sed

用于搜索和替换xml文件中的文本的sed,xml,sed,Xml,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=\

我正在努力表达

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

sed-i“s/^\([[:space:]*\)\(前进的道路是使用XML解析器,例如
xmlstarlet

xmlstarlet ed --update '//pro/@rev' --value "blah" xmlfile.xml
请注意,由于我们对您的完整XML没有清晰的了解,这可能不起作用

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

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

您的XML无效,
rev
值应为双引号谢谢您的评论,我尝试过使用双引号,但仍然不起作用。您需要正则表达式来解析HTML。您可能会遇到小马。感谢您的简要解释,并向我展示了解决此问题的不同方法:)
xmlstarlet ed --update '//pro/@rev' --value "blah" \
              --insert '//pro' --type attr --name "branch" --value "master" xmlfile.xml