Bash:grep模式来解析命令输出

时间:2013-08-10 02:53:40

标签: xml-parsing grep pattern-matching text-parsing

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

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

enter image description here

我的目标是解析该输出,只解析<date>标记之间的字符串,但由于文档可能包含其他<date>标记,因此必须仅检查<date>之后的<key>SULastCheckTime</key>。 (这是一个混乱的情况,有新的行/空格)。

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

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

它工作正常,但你看得很乱,我写不出更好的东西?你能帮助我做得更好吗?

谢谢!

PS:因为我在OSX中这样做,所以我没有新的GNU grep选项。顺便说一下,bash版本是3.2.48(1)。而且......我无法安装其他工具以更好的方式解析XML。

1 个答案:

答案 0 :(得分: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