如何仅grep所需的模式

时间:2015-08-26 00:10:16

标签: bash unix ksh

文件中的数据:

23445 messages sent
number of messages sent by io is 245
total messages sent is 23456
message are not sent
messages sent 4321

我想提取已发送的消息'但这种模式在大多数行中 我的输出文件应该像

23445 messages sent
messages sent 4321

这里的意思是我的模式可以是行的开头或行的结尾而不是行的中间行。如何提取这些模式

1 个答案:

答案 0 :(得分:1)

您可以将grep-E标志一起使用,如下所示:

grep -E '^messages sent|messages sent$' myfile.txt

根据您的示例输入,产生:

23445 messages sent
messages sent 4321

来自man页面:

  

-E, - extended-regexp                将模式解释为扩展正则表达式(即强制grep表现为egrep)

修改

由于您提出了这个问题,@Sriram P通过以下评论更新了问题,询问如何排除第0 new messages sent行。

考虑到这一点,这里有一个更新的模式,应该更好地满足原始要求,并排除0 new messages sent

grep -E '^([0-9]+ )?messages sent( [0-9]+)?$' myfile.txt

希望这会有所帮助:)