【问题标题】:Command line modify xml property with value defined inline命令行使用内联定义的值修改 xml 属性
【发布时间】:2013-10-09 13:06:57
【问题描述】:

我有一个像这样的 xml 属性:

<property name="foo" value="bar"/>

并且想将值“bar”修改为其他值。任何标准的命令行工具可以做到这一点?我无法让 sed 玩得很好,我不确定应该转义哪些角色。

【问题讨论】:

    标签: xml bash command-line sed


    【解决方案1】:

    使用awk

    echo '<property name="foo" value="bar"/>' | awk '{sub(/bar/,"new")}1'
    <property name="foo" value="new"/>
    

    另一个版本

    echo '<property name="foo" value="bar"/>' | awk -F\" '{$4="new"}1' OFS=\"
    <property name="foo" value="new"/>
    

    【讨论】:

      【解决方案2】:

      xmlstarlet 是一个功能齐全的 XML 工具。

      xmlstarlet ed --update /property/@value -v qux <<END
      <property name="foo" value="bar"/> 
      END
      
      <?xml version="1.0"?>
      <property name="foo" value="qux"/>
      

      添加 -O 以省略 XML 声明行。

      【讨论】:

      • 不幸的是,我无法控制正在运行的机器,所以它对我来说只是标准工具:( sed、awk 等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多