2014-03-12 85 views
3

我有以下日誌:如何配合SED模式:

File Process Start : 2014-03-12 - 10:43:40 
UnZipping File : fetch_export?id=t63184&file=4 
Extracted File : exp_4.mbx 
Expected Messages : 6236 
File Process Start : 2014-03-12 - 10:57:38 
UnZipping File : fetch_export?id=t63185&file=39 
Extracted File : 
Expected Messages : 0 
File Process Start : 2014-03-12 - 10:57:38 
UnZipping File : fetch_export?id=t63185&file=33 
Extracted File : 
Expected Messages : 0 
File Process Start : 2014-03-12 - 10:57:38 
UnZipping File : fetch_export?id=sept2012&file=61 
Extracted File : exp_61.mbx 
Expected Messages : 7935 

我需要在這個命令來改變什麼?

sed -n '/File Process Start/,/Expected Messages/p'

我需要輸出之間只有

File Process Start 
... 
Expected Messages : 0

像這樣:

File Process Start : 2014-03-12 - 10:57:38 
UnZipping File : fetch_export?id=t63185&file=39 
Extracted File : 
Expected Messages : 0 
File Process Start : 2014-03-12 - 10:57:38 
UnZipping File : fetch_export?id=t63185&file=33 
Extracted File : 
Expected Messages : 0
+0

你有什麼條件/檢查得到這個輸出。 – sat

回答

2

的想法是打印之間的界限 「文件進程開始...」 和「預期消息:0「。問題是,如果您會發現「預期消息:0」或「預期消息:X」,則事先不知道。因此,從「文件處理啓動」開始,請繼續將行保存在保留空間中,直到您可以決定是打印還是丟棄它們。

sed -n '/Expected Messages : 0/{H;g;p};/.*/H;/File Process Start/h' log.txt 

的僞碼是:

  • 如果行包含 「預期消息:0」,(ħ)追加在保持空間這條線(在這一點上,保持空間將具有行「文件進程開始...」,「UnZipping File ...」和「Extracted File ...」),(g)將內容從保持空間獲取到模式空間(即,從「文件進程開始...」開始的行,直到您剛添加的最後一行),(p)打印模式空間的內容。

  • 如果該行包含任何其他內容,(H)將其追加到保存空間。

  • 如果行包含「文件進程開始」(^h)殲滅什麼在保留空間,並把這個新的生產線存在。

+0

太棒了!你能解釋一下嗎? – user3410509

0

這可能爲你工作(GNU SED):

sed -n '/File Process Start/{h;d};H;/Expected Messages : 0/{g;p}' file