【问题标题】:sed to find and replace a value in xml filesed 查找和替换 xml 文件中的值
【发布时间】:2017-08-07 15:52:39
【问题描述】:

我必须使用 sed 运行这项工作,不知道值 (xxx),但只知道属性 (revision)

<types name="foo" revision="xxx">

<types name="foo" revision="5678">

我的第一次尝试是:

sed 's@(revision=\").*@\1$5678\">@'

但它不起作用。

【问题讨论】:

    标签: xml bash sed


    【解决方案1】:

    使用以下sed 方法:

    sed -Ei 's~( revision=")[^"]+"~\15678"~g' test.xml
    

    -E 选项,允许扩展正则表达式

    -i 选项,允许修改文件就地

    【讨论】:

      【解决方案2】:

      您可能可以使用sed 完成工作(在非常简单的情况下),但要编辑xml,这里有更好(且容易出错)的工具,例如xmlstarlet。使用很简单:

      xmlstarlet ed -u "//types/@revision" -v 5678 old.xml >new.xml
      

      编辑:

      使用perl & XML::LibXML 模块的替代解决方案:

      perl -MXML::LibXML -E '$d=XML::LibXML->load_xml(location=>q{file.xml});$_->setAttribute(q{revision},4567)for$d->findnodes(q{//types[@revision]});say $d'
      

      【讨论】:

      • ++ 了解正确的方法。 sed 不推荐用于XML 操作
      • 谢谢,jm666,但我运行的设置非常有限,只有 sed 可用。
      • @pepero YMMV,但想知道哪个平台(设置)没有,例如perl。 :) 即使在 rPI 上也可以有 perl。使用一些XML/XPath perl 模块的解决方案类似...
      • @jm666,好吧,做“sed”工作的工具太多了。我们还必须遵守安装任何东西的政策。
      猜你喜欢
      • 2010-12-20
      • 2020-06-24
      • 2021-11-06
      • 2017-09-12
      • 1970-01-01
      • 2016-10-31
      • 2014-08-17
      • 2012-02-14
      • 2019-10-16
      相关资源
      最近更新 更多