xml - 使用 Linux Bash 脚本从 XML 文件中获取数据

标签 xml linux

我有一个 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>

最佳答案

命令

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>

关于xml - 使用 Linux Bash 脚本从 XML 文件中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11197751/

相关文章:

java - 需要转义 java 中 XML 标签(<、>、')之间存在的一些特殊字符

android - 使用 Volley Android 库发送 XML 数据

linux - 如何使用 ff 包加载大 csv?

linux - 每个进程如何在共享库中拥有自己的全局数据副本

php - 删除结帐顶部链接 magento

php - XPATH 检查属性是否包含多个值之一

java - 在 Android 中设置视频作为背景播放

linux - 如何从失败的命令返回退出代码 0

c - 测量 Linux 中应用程序的运行时间

linux - 用于端口路由的 docker ha 代理