簡體   English   中英

匹配項之一后,BASH grep具有多個參數+ n行

[英]BASH grep with multiple parameters + n lines after one of the matches

我有一堆文本作為命令的輸出,我只需要顯示特定的匹配行,然后在匹配“消息”之后顯示一些其他行(消息文本明顯長於1行)

我試過的是:

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

但是在每次匹配之后它包括50行,我只需要將其傳遞給單個參數。 我該怎么做?

輸出命令的代碼:

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

telnet輸出的一部分:

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

請嘗試以下操作:

... | 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--'

使用grep很難做到。 最好為此使用awk

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

在這里, awkMessage:模式下打印50行,而對於所有其他模式僅打印一行。

暫無
暫無

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

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