Sed

使用 sed 更改 XML 節點的值?

  • May 15, 2021

我在 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, from yq, 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

引用自:https://unix.stackexchange.com/questions/506526