[英]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}}'
在这里, awk
在Message:
模式下打印50行,而对于所有其他模式仅打印一行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.