【问题标题】:script to update XML file data更新 XML 文件数据的脚本
【发布时间】:2014-08-26 09:36:36
【问题描述】:

我需要通过在下面的 .xml 文件中搜索 avp 名称来更新值字段。

 <avp name="CC-Request-Type" value="1"> </avp>
  <avp name="CC-Request-Number" value="0"> </avp>
  <avp name="Subscription-Id">
  <avp name="Subscription-Id-Type" value="0"></avp>
  <avp name="Subscription-Id-Data" value="4081234567"></avp>
  <avp name="Framed-IP-Address" value="0xXXXXX"> </avp>

我需要搜索行有“Framed-IP-Address”更新值归档 0xXXXXX 到 0xYYYYY

请让我知道如何使用 sed 或 AWK 或 shell 脚本执行此操作的任何输入都会非常有帮助。

【问题讨论】:

    标签: xml bash shell awk sed


    【解决方案1】:

    XML-aware 是正确的工具。

    XSLT(通过xsltproc)或您可以使用的任何通用脚本语言(Python、Ruby、Perl、node.js 甚至 PHP-CLI)都是修改 XML 的合适工具的示例。 sed 或 awk 或 bash 脚本是不合适的示例。

    这是一个基于 XSLT 的解决方案

    <!-- modify-Framed-IP-Address.xsl -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:template match="node() | @*">
        <xsl:copy><xsl:apply-templates select="node() | @*" /></xsl:copy>
      </xsl:template>
    
      <xsl:template match="avp[@name = 'Framed-IP-Address']/@value">
        <xsl:attribute name="value">0xYYYYY</xsl:attribute>
      </xsl:template>
    </xsl:stylesheet>
    

    用作

    xsltproc modify-Framed-IP-Address.xsl input.xml -o output.xml
    

    将替换属性并将结果保存到output.xml

    如果您不想使用 XSLT,请使用您熟悉的脚本语言。例如,对于这样一个简单的任务,基于 Python 的解决方案将采用相同顺序的少于 10 行代码。请参阅this thread 了解如何开始。

    【讨论】:

      【解决方案2】:

      试试这个 sed 命令,

      sed '/<avp name=\"Framed-IP-Address\"/s~value=\"[^"]*\"~value="0xYYYYY"~g' file
      

      通过 awk,

      awk '/<avp name=\"Framed-IP-Address\"/{sub(/value=\"[^"]*\"/,"value=\"0xYYYYY\"")}1' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-18
        • 2013-05-01
        • 2018-08-24
        • 2013-07-24
        • 1970-01-01
        • 2018-12-31
        • 1970-01-01
        相关资源
        最近更新 更多