使用Linux Bash Script从XML文件中获取数据

时间:2012-06-25 21:39:50

标签: xml linux

我有一个包含数据的XML文件,我需要用Linux Bash脚本提取。例如,我需要括号中的所有内容并相应地在终端中打印出来(第一个描述旁边的名字)。

最好的方法是什么?我能够使用XPath使用c#,但我不能简单地使用Linux Bash脚本吗?我知道我可以用awk,sed,grep,cut等完成大部分工作,但我不认为(实际上我知道我不是)正确地做到了。我在某一点上将描述数据提取到一个文件并命名为一个文件,但几个小时后,我意识到这不是最好/正确的方法。

它应该如何阅读的例子是。

  • name1 - description1
  • name2 - description2
  • name3 - (空白)
  • name4 - description3

谢谢!

如果我可以添加任何细节以使其更清晰,请告诉我! (大脑在工作的一天中有点油炸)

示例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>

3 个答案:

答案 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二进制文件。