1 xml sed xmlstarlet
我在 XML 文档中有以下节点:
<client-version>1.2.8</client-version>
Run Code Online (Sandbox Code Playgroud)
我怎样才能更换更换节点的值,1.2.8与1.2.9?
想要的输出:
<client-version>1.2.9</client-version>
Run Code Online (Sandbox Code Playgroud)
您将使用 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)