Sed
使用 sed 更改 XML 節點的值?
我在 XML 文件中有以下節點:
<client-version>1.2.8</client-version>
如何用 替換替換節點的值
1.2.8
,1.2.9
?想要的輸出:
<client-version>1.2.9</client-version>
您將使用 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
, fromyq
, from 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