[英]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.