sedを使用してXMLノードの値を変更しますか?

sedを使用してXMLノードの値を変更しますか?

XML文書には次のノードがあります。

<client-version>1.2.8</client-version>

ノードの値1.2.8をに置き換える方法は1.2.9

希望の出力:

<client-version>1.2.9</client-version>

ベストアンサー1

これを行うには、XMLパーサーを使用できます。はいxmlstarlet(コマンドラインXMLツール):

$ xmlstarlet ed -u '//client-version' -v '1.2.9' file.xml
<?xml version="1.0"?>
<client-version>1.2.9</client-version>

上記のコマンドは以下を探します。みんな文書ノードの発生回数client-versionで、その値を文字列に変更します1.2.9

1.2.8利用可能な項目のみを変更するには

xmlstarlet ed -u '//client-version[text() = "1.2.8"]' -v '1.2.9' file.xml

出力を新しいファイルにリダイレクトしてスキャンしたら、元のファイル名に名前を変更するか、オプションを使用して実行してxmlstarletファイルを所定の場所に編集します。-L--inplace


使用するxq, から来るyq, から来るhttps://kislyuk.github.io/yq/jq、式を使用してXML文書を変更できます。

xq -x '(..|."client-version"? // empty) |= "1.2.9"' file.xml

client-version1.2.9これにより、文書の場所に関係なく各ノードの値が更新されます。

1.2.9次のように変数から文字列を挿入できます。

new_version=1.2.9
xq -x --arg ver "$new_version" '(..|."client-version"? // empty) |= $ver' file.xml

おすすめ記事