尋找日誌檔案中異常行的行號

尋找日誌檔案中異常行的行號

我正在編寫一個 shell 腳本程式來從日誌檔案中提取一些異常並進行一些處理。目前,我在腳本中使用以下命令來捕獲日誌檔案中出現異常的行號。例外行將包含ERROR日期和時間戳之後的關鍵字

lineNos=($(grep -n ERROR $file | grep Exception | cut -d':' -f1 | tail -3))

在測試當前腳本時,我注意到某些日誌條目在同一行中包含錯誤和異常,但這實際上不是我正在尋找的錯誤類型(示例第 5 行)我想以這種方式修改我的腳本它只會傳回下面範例日誌中的第3 行。

2016-10-21 15:25:37,231 INFO Processinng current row  
2016-10-21 15:25:37,231 INFO com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 ERROR com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 DEBUG com.test.main com.test.controller.CrashException: 
2016-10-21 15:25:37,231 DEBUG Processing row with ERROR and Exception 
2016-10-21 15:25:37,231 DEBUG processed row 1: 

答案1

如果您想取得包含單字ERROR和 的行Exception,請嘗試:

grep -E "ERROR.*Exception" $file

答案2

如果您使用awk代替grep,您不僅可以列印行號(更準確地說,記錄數字)直接,但也單獨測試特定的空白分隔字段,例如

awk '$3 == "ERROR" && /Exception/ {print NR}' logfile

或(更具體地說 - 將比賽限制Exception在最後一場)

awk '$3 == "ERROR" && $NF ~ /Exception/ {print NR}' logfile

答案3

cat thelogfile.log | nl -ba | grep "ERROR"

這會將檔案透過管道傳輸到 nl 到編號行,然後使用 grep 過濾錯誤行。如果您只想要錯誤行號,請新增 awk '{print $1}'。 cat 也可以使用 -n 標誌來行號,但我更喜歡 nl。

有錯誤的行號數組變數的範例;

linenos=($(cat -n thelogfile.log | grep "ERROR" | awk '{print $1}' | tr "\n" " " | sed 's/$/\n/'))

編輯:

ps grep 即可;

grep ",[0-9]* ERROR"

答案4

使用更具體的正規表示式:

grep '^[0-9, :-]\+ERROR' "$file"

相關內容