簡體   English   中英

用於檢索日志文件中前一行的正則表達式

[英]A regular expression to retrieve the previous line in a log file

我的日志文件包含以下內容:

 2009-03-12T12:44:27+0000 something was logged 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times 

我可以編寫一個正則表達式來檢索帶有“重復的最后一條消息...”語句的行,但是,該行是沒有意義的,而又不檢索其前面的行。

話雖如此,是否有人知道一個正則表達式,只要檢測到“最后一條消息重復...”語句,我就可以同時檢索這兩行?

編輯為2組匹配的正則表達式。 您可以在以下地方一下: RegexLib

較少,然后優化,但這:

([\r\n].*?)(?:=?\r|\n)(.*?(?:last message repeated).*)

應該可以從以下結果中獲得結果:

2009-03-12T12:44:27+0000 something1 was logged
2009-03-12T12:44:27+0000 something2 was logged
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times
2009-03-12T12:44:27+0000 something3 was logged
2009-03-12T12:44:27+0000 something4 was logged
2009-03-12T12:44:27+0000 something5 was logged
2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times

導致:

Matches
First Match, First Group: 2009-03-12T12:44:27+0000 something2 was logged
First Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times
Second Match, First Group: 2009-03-12T12:44:27+0000 something5 was logged 
Second Match, Second Group: 2009-03-12T12:45:36+0000 127.0.0.1 127.0.0.1 <auth.info> last message repeated 2 times

我會這樣做。 嘗試搜索包括兩個組的模式。 第一組是一行,其后是另一組,其中包含另一行帶有“最后一條重復的消息”文本。 然后,第一組的內容就是您要查找的文本。

這樣的事情(這是過於簡化的正則表達式):

\n(.*)\n(.*)last message repeated

現在,第一個組值包含您感興趣的行。

它必須是正則表達式嗎? grep允許您在匹配之前和之后獲取上下文( -B NUM-A NUM選項)

模式^。* $匹配整行。 翻譯:行首,后跟任意數量的字符,后跟行尾。 因此,也許您可​​以搜索“任意行,后跟”(那里的模式)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM