用于更新XML文件数据的脚本
我需要通过在below.xml文件中搜索avp名称来更新值字段用于更新XML文件数据的脚本,xml,bash,shell,awk,sed,Xml,Bash,Shell,Awk,Sed,我需要通过在below.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="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>
我需要搜索具有“框架IP地址”更新值的行,更新值为0xXXXXX到0xYYYYY
请让我知道如何使用sed、AWK或shell脚本。任何输入都将非常有用。尝试使用此sed命令
sed '/<avp name=\"Framed-IP-Address\"/s~value=\"[^"]*\"~value="0xYYYYY"~g' file
sed'/这方面的正确工具是支持XML的
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>
将替换该属性并将结果保存到output.xml
如果您不想使用XSLT,请使用您知道的脚本语言。例如,对于这样一个简单的任务,一个基于Python的解决方案的代码行数将少于10行。查看以了解如何开始
<!-- 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