2016-11-11 110 views
1

我在日誌文件中的錯誤是這樣的:有沒有辦法從日誌grep這個多行部分?

[11:16:16 31/10] 2428 ERROR: Wide character in subroutine entry at /home/site/site/app/lib/SC/Contro 
ller/Client/Sites.pm line 1584. 
Stack: 
    [/xxx:1584] 
    [/xxx:70] 
    [/xxx:133] 

我想把這個錯誤像一些文件:

cat apache.error.log | grep "query NS" > apache.error.log-NS 

但我可以怎麼做,對於多日誌消息?

回答

1

我發現這個解決方案:

cat apache.error.log | grep -Pzo '^.*?Wide character.*?\nStack.*?(\n(?=\s).*?)*$' 

其中(\n(?=\s).*?)*表示:

  • (...)*查找多次
  • \n下一行
  • (?=\s)從空白字符開始
  • .*?,直到該行結束(注意在整個正則表達式$字符)
0

無意冒犯,但我覺得@尤金的解決方案過於通用的,因爲這是一個日誌文件,它也許可以該REG前比賽不需要的線。 所以,請確保我們確切的線,這是我認爲應該是前例。歡迎評論!

^\[\d{2}\:\d{2}\:\d{2}\s\d{2}\/\d{2}\]\s\d+\sERROR\:\sWide\scharacter\sin\ssubroutine\sentry\sat\s[a-zA-Z\/\.]+\s.*?\nStack.*?(\n(?=\s).*?)*$ 
+0

並非所有的行都有日期。有些行的日期格式不同。 '\ s'也是通用的。獲得更多信息比失去一些更好。 –

相關問題