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

具有多个参数的BASH grep+;其中一个匹配后有n行,bash,grep,Bash,Grep,我有一堆文本作为命令的输出,我只需要在匹配“message”之后显示特定的匹配行加上一些额外的行(消息文本明显长于1行) 我尝试的是: grep -e 'Subject:' -e 'Date:' -A50 -e 'Message:' 但它在每次匹配后包含50行,我只需要将其传递给单个参数。我该怎么做 使用输出命令进行编码: (<...> | telnet <mailserver> 110 | grep -e 'Subject:' -e 'Date:' -A50 -e '

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

我尝试的是:

grep -e 'Subject:' -e 'Date:' -A50 -e 'Message:'
但它在每次匹配后包含50行,我只需要将其传递给单个参数。我该怎么做

使用输出命令进行编码:

(<...> | telnet <mailserver> 110 | grep -e 'Subject:' -e 'Date:' -A50 -e 'Message:'
(| telnet 110 | grep-e'主题:'-e'日期:'-A50-e'消息:'
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
日期:2013年9月10日星期二16
消息ID:请尝试以下操作:

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

使用grep很难做到这一点。最好使用
awk

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

awk'/Subject:| Date://;/Message://{while(LCA您可以粘贴示例输入和预期输出,因为它不清楚您到底需要什么。您将为命令grep-e“Subject:”-e“Date:”-A50-e“Message:”?提供什么输入?预期输出是什么。希望它清晰吗?输入是从telnet命令输出的电子邮件。它非常长,包含许多不必要的技术细节问题。在最终输出中,我只需要1行主题和日期+50行消息文本。您可以变形并创建一些数据以供我们理解。我们不需要全部数据。原因是我们需要了解问题的具体内容。如果没有这些,恐怕我们将能够帮助您。我不确定您是否在跟踪我。问题很简单,它现在在每次匹配后输出50行额外的内容。现在我得到1行主题+50行后续内容(包括不需要的技术内容,如MIME版本和MessageID代码),1表示日期+50等。我正在寻找一种方法来指定grep命令,以便在我指定的参数之一(而不是所有参数)之后包含额外的行。应该这样做,但有一个问题。如果匹配中有“/”怎么办?例如,假设“Message/text”是我们的匹配,如何使其工作而不破坏语法?在AWK中,您有e以“\”转义“/”,因此正则表达式类似于
/Message\/text/
awk '/Subject:|Date:/;/Message:/ {while(l<=50){print $0;l++;getline}}'