BASH grep,其中一个匹配后有多个参数+ n行

时间:2014-11-16 16:00:34

标签: bash grep

我有一堆文本作为命令的输出,我需要在匹配“消息”之后只显示特定的匹配行加上一些额外的行(消息文本明显长于1行)

我试过的是:

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

但它在EACH匹配后包含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

2 个答案:

答案 0 :(得分: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--'

答案 1 :(得分:0)

用grep很难做到。更好地使用awk来实现此目标

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

此处awkMessage:图案下方打印50行,并且只为所有其他图案打印一行。