簡體   English   中英

如何將 grep 特定錯誤及其來自日志文件的多行描述和 output 它放在 Linux 的新日志文件中?

[英]How to grep specific errors together with its multi-line description from a log file and output it in a new logfile in Linux?

基本上我想 grep 基於關鍵字的日志文件中的特定類型的錯誤及其多行描述。 例如,日志文件可能看起來像這樣

1  Error - [KEYWORD1] Short description
2  Description
3  Description
4  Description
5
6  Error - [KEYWORD2] Short description
7  Description
8  Description
9  Description
10 
11 Error - [KEYWORD1] Short description
12 Description
13 Description
14 Description

每個錯誤都由特定的關鍵字定義,並且錯誤由新行分隔。 有沒有辦法僅將 [KEYWORD1] 類型的 grep 錯誤及其描述和 output 寫入新的日志文件?

預期 output:

1  Error - [KEYWORD1] Short description
2  Description
3  Description
4  Description

5  Error - [KEYWORD1] Short description
6  Description
7  Description
8  Description

我嘗試了類似的東西

grep -E "KEYWORD1" 文件名 | 排序 | tee new_errorlog.log

但這只會返回我沒有描述的第一行。 請注意,描述中有錯誤 ID/錯誤位置詳細信息,因此為什么使用排序以及為什么需要它們。 我對 Linux 有點陌生。 所以任何幫助表示贊賞。 干杯。

*注意:行號不是文件的一部分

使用 GNU sed:

sed -n '/\[KEYWORD1\]/,/^$/p' file

Output:

Error - [KEYWORD1] Short description
Description
Description
Description

Error - [KEYWORD1] Short description
Description
Description
Description

^$匹配一個空行。

Cyrus 的 sed 方法簡單有效,但我想我會使用awk來代替,因為它通常更容易調整您的條件。

awk '$1=="Error" && /KEYWORD1/ { s=1 } /^$/ { s=0 } s' file

這使用信號量或開關s來確定是否應打印行。 帶有適當關鍵字的錯誤行將打開開關,空白行將其關閉。

如果您可能缺少空行,則可以執行以下操作:

awk '$1=="Error" { s=0 } $1=="Error" && /KEYWORD1/ { s=1 } s' file

這使用與以前相同的條件來打開開關,但使用錯誤行的存在(帶或不帶關鍵字)將其關閉。

您可以在稍微復雜一點的條件下應用相同的邏輯,以使事情更具彈性或可靠性。

暫無
暫無

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

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