0

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

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

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

  • 名称1 - 描述1
  • 名称 2 - 描述 2
  • 名称 3 -(空白)
  • 名称 4 - 描述 3

谢谢!

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

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

3 回答 3

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>
于 2012-06-25T22:00:52.087 回答
2

您可以xpath从 bash 启动命令。它与 Perl XML 一起安装,并允许您非常轻松地对标准输出进行任何 XPath 查询。

于 2012-06-25T21:49:17.697 回答
0

如果xpath未安装可执行文件,您可以像这样安装它:

cpan XML::XPath

那应该下载必要的 Perl 模块,并安装xpath二进制文件。

于 2012-06-25T23:17:41.930 回答