我需要通过搜索以下.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>
我需要搜索行有#34; Framed-IP-Address&#34;将值0xXXXXX更新为0xYYYYY
请让我知道如何使用sed或AWK或shell脚本执行此操作将非常有用。
答案 0 :(得分:2)
正确的工具是 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以了解如何开始。
答案 1 :(得分:1)
试试这个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