1

我正在尝试解析命令行工具的输出。它直接输出 XML STDOU,我想解析它。

  • 该工具输出完整的 XML 文档,如下所示:

在此处输入图像描述

我的目标是解析该输出并且只解析<date>标签之间的字符串,但由于文档可能包含另一个<date>标签,它必须只检查<date>后面的<key>SULastCheckTime</key>。(这是一个混乱的情况,那里有新的行/空格)。

目前我正在使用以下命令解决这种情况:

tool... | grep -A1 '<key>SULastCheckTime</key>' | grep 'string.$' | sed -e 's,.*<date>\([^<]*\)</date>.*,\1,g'

它工作正常,但是你可以看到它非常混乱,我不能写更好的东西?你能帮我做得更好吗?

谢谢!

PS:由于我在 OSX 中执行此操作,因此我没有新的 GNUgrep选项。顺便说一句,bash 版本是 3.2.48(1)。而且...我负担不起安装其他工具来以更好的方式解析 XML。

4

1 回答 1

1

也许是这样的?

$ cat foo.input
foo
 foo
    <key>some key</key>
    <date>some date</date>
bar
 bar
    <key>SULastCheckTime</key>
    <date>2013-08-10T00:27:40Z</date>
quux
 quux

 

$ awk '/<key>SULastCheckTime<\/key>/ { toggle=1 } toggle && /<date>.*<\/date>/ { gsub(/<[^>]*>/, "", $1); print; exit }' foo.input
2013-08-10T00:27:40Z
于 2013-08-14T11:02:23.673 回答