2015-10-13 70 views
0

我在Graylog中构建了一个提取器来提取tac_plus syslog数据。匹配多个匹配的正则表达式

我有一个日志:

<70>Oct 13 10:10:05 auth tac_plus[17354]: 2015-10-13 10:10:05 -0500#01110.10.89.1#011jmartinez#011tty132#01110.10.1.27#011stop#011task_id=146#011timezone=CDT#011service=shell#011start_time=1444747732#011priv-lvl=15#011cmd=show running-config <cr> 

我想提取011标记之间的indvidual语句。我能拿到第一部分,用IP:

(?<=#011)(.*?)(?=#011) 

现在我想提取“jmartinez”。我想:

#011.*?#011(.*)(#011) 

但它匹配:

jmartinez#011tty132#01110.10.1.27#011stop#011task_id=146#011timezone=CDT#011service=shell#011start_time=1444747732#011priv-lvl=15 

如果我这样做:

#011.*?#011(.*)(#011tty) 

它似乎工作,但我宁愿它不依赖于看到#011tty因为它可能是其他信息中的其他内容。

下一个呢?我怎么能提取tty132,10.10.1.27,停止,task_id = 146等

任何帮助将不胜感激!

回答

0

简单的答案是使用不愿意量词(就像你的工作IP捕捉):

#011.*?#011(.*?)#011 

但我会进一步去捕获所有组一次,如:

#011(.*?)#011(.*?)#011(.*?)#011(.*?)#011(.*?)#011(.*?)#011 
+0

好神。我发誓我尝试过。我无法一次捕捉到它们,但这对我非常有帮助!谢谢! –

+0

@Jose只记得'。*'吞下了一切,但仍然匹配。实际上,它会将所有内容都消耗到输入的末尾,然后回溯到下一个项匹配某个项。 – Bohemian