使用正则表达式

时间:2015-10-13 15:23:41

标签: regex

我正在Graylog中构建一个提取器来提取tac_plus系统日志数据。

我有一个日志:

<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标记之间的单独陈述。我能够得到第一部分,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,stop,task_id = 146等

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

简单的答案是使用不情愿的量词(就像你工作的IP捕获一样):

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

但我会更进一步捕捉所有群体,例如:

#011(.*?)#011(.*?)#011(.*?)#011(.*?)#011(.*?)#011(.*?)#011
相关问题