特定のxmlタグを見つけて、タグ内のテキストをパラメータ化された値に置き換えます。何度も発生した場合は交換が必要です。
サンプルファイルの内容:
<a>abc</a>
現在の試み:
sed -i "s/\(<a>\).*\(<\/a>\)/\(<a>\)$param\(<\/a>\)/g" script.xml
希望の結果:param = 111の場合
<a>111</a>
ベストアンサー1
私はあなたが解決策を望んでいることを知っていますが、通常、非常に単純なツールを除いて、XML文書を処理するときにsed
XMLベースのツール(それらの多くがあります)を使用することをお勧めします。sed
これが私のXML文書(doc.xml
)であるとしましょう。
<?xml version="1.0"?>
<xml>
<c><a>abc</a></c>
<b>
<a>abc</a>
<a>abc</a>
</b>
<a parm="FPM">abc</a>
</xml>
次のXMLスタイルシートを使用して、style.xsl
文書を必要な形式に変換します。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name = "value" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="a/text()[.='abc']">
<xsl:value-of select = "$value" />
</xsl:template>
</xsl:stylesheet>
xsltproc
ほとんどの主要なLinuxディストリビューションにデフォルトでインストールされているツールを使用して変換を実行します。
$ xsltproc --stringparam value "111" style.xsl doc.xml
<?xml version="1.0"?>
<xml>
<c><a>111</a></c>
<b>
<a>111</a>
<a>111</a>
</b>
<a parm="FPM">111</a>
</xml>
$