我有一个包含数据的XML文件,我需要用Linux Bash脚本提取。例如,我需要括号中的所有内容并相应地在终端中打印出来(第一个描述旁边的名字)。
最好的方法是什么?我能够使用XPath使用c#,但我不能简单地使用Linux Bash脚本吗?我知道我可以用awk,sed,grep,cut等完成大部分工作,但我不认为(实际上我知道我不是)正确地做到了。我在某一点上将描述数据提取到一个文件并命名为一个文件,但几个小时后,我意识到这不是最好/正确的方法。
它应该如何阅读的例子是。
谢谢!
如果我可以添加任何细节以使其更清晰,请告诉我! (大脑在工作的一天中有点油炸)
示例XML(简化为一个实例)
<zabbix_export>
<templates>
<template>
<items>
<item>
<name>Available memory</name>
<description>Available memory is defined as free+cached+buffers memory.</description>
</item>
</items>
</template>
<templates>
应如何读出:
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Another Name</name> - <description>Another Description</description>
<name>Another Name</name> - <description>Another Description</description>
<name>Another Name</name> - <description>Another Description</description>
答案 0 :(得分:3)
xmlstarlet sel -t -m '//item/*' -c . -n input.xml |
sed '2~2s/$/\n/' |
awk -F'\n' -vRS='' '{print $1" - "$2}'
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
<name>Available memory</name> - <description>Available memory is defined as free+cached+buffers memory.</description>
答案 1 :(得分:2)
您可以从bash启动xpath
命令。它使用Perl XML进行安装,并允许您非常轻松地对stdout执行任何XPath查询。
答案 2 :(得分:0)
如果未安装xpath
可执行文件,您可以这样安装:
cpan XML::XPath
那应该下载必要的Perl模块,并安装xpath
二进制文件。