2014-11-16 65 views
0

我有一堆文本作爲命令的輸出,我需要在匹配「message」後僅顯示特定匹配行和一些附加行(消息文本明顯超過1線)BASH grep與其中一個匹配後的多個參數+ n行

我試圖不再是:

grep -e 'Subject:' -e 'Date:' -A50 -e 'Message:' 

但它包括每場比賽後50行,我需要的是隻傳遞給單個參數。我會怎麼做?

代碼的輸出命令:遠程登錄輸出的

(<...> | telnet <mailserver> 110 | grep -e 'Subject:' -e 'Date:' -A50 -e 'Message:' 

部分:

Date: Tue, 10 Sep 2013 16 
Message-ID: <00fb01ceae25$ 
MIME-Version: 1.0 
Content-Type: multipart/alternative; 
    boundary="----=_NextPart_000_00FC_01CEAE3E.DE32CE40" 
X-Mailer: Microsoft Office Outlook 12.0 
Thread-Index: Ac6uJWYdA3lUzs1cT8.... 
Content-Language: lt 
X-Mailman-Approved-At: Tue, 10 Sep 2013 16:0 .... 
Subject: ... 
X-BeenThere: ... 
Precedence: list 
+0

你可以粘貼樣本輸入和期望的輸出,因爲它不清楚你到底需要什麼。 – SMA

+0

更新了OP。 – SmOg3R

+0

你要給命令提供什麼輸入grep -e'主題:'-e'日期:'-A50 -e'消息:'?什麼是預期的產出。希望它清楚嗎? – SMA

回答

0

嘗試以下操作:

... | telnet ... > <file> 
grep -e 'Subject:' -e 'Date:' <file> && grep -A50 -e 'Message:' <file> 

需要先轉儲輸出到文件。

這也可以用awk來完成,而不需要將輸出轉儲到文件。

... | telnet ... | awk '/Date:/ {print}; /Subject:/ {print}; /Message:/ {c=50} c && c--' 
0

隨着grep這將是很難做到。此

awk '/Subject:|Date:/;/Message:/ {while(l<=50){print $0;l++;getline}}' 

這裏awk印刷品50行以下Message:圖案和只有一條線被印刷的所有其他圖案更好地利用awk

+0

應該這樣做,但有一個問題。如果匹配中有'/'會怎麼樣例如,讓我們說'消息/文本'是我們的匹配,如何使它在不破壞語法的情況下工作? – SmOg3R

+0

在AWK中,你必須用'\'來轉義'/',所以正則表達式就像'/ Message \ /文本/' –