使用 sed 更改 XML 节点的值?

1 xml sed xmlstarlet

我在 XML 文档中有以下节点:

<client-version>1.2.8</client-version>
Run Code Online (Sandbox Code Playgroud)

我怎样才能更换更换节点的值,1.2.81.2.9

想要的输出:

<client-version>1.2.9</client-version>
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 7

您将使用 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>
Run Code Online (Sandbox Code Playgroud)

上面的命令将定位所有出现的client-version文档节点并将它们的值更改为 string 1.2.9

要仅更改那些1.2.8,您将使用

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

将输出重定向到一个新文件,检查它并将其重命名为原始文件名,或者xmlstarlet使用它的-L--inplace选项运行以就地编辑文件。


使用xq, from yq, from https://kislyuk.github.io/yq/,它允许您使用jq表达式来修改 XML 文档:

$ xmlstarlet ed -u '//client-version' -v '1.2.9' file.xml
<?xml version="1.0"?>
<client-version>1.2.9</client-version>
Run Code Online (Sandbox Code Playgroud)

无论它位于文档中的哪个位置,这都会更新每个client-version节点的值1.2.9

字符串1.2.9可以从变量插入,如下所示:

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