2015-10-13 68 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