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-version
1.2.9
これにより、文書の場所に関係なく各ノードの値が更新されます。
1.2.9
次のように変数から文字列を挿入できます。
new_version=1.2.9
xq -x --arg ver "$new_version" '(..|."client-version"? // empty) |= $ver' file.xml