微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – grep以每行为基础显示模式的出现次数

从输入文件

I am Peter
I am Mary
I am Peter Peter Peter
I am Peter Peter

我希望输出是这样的:

1 I am Peter
3 I am Peter Peter Peter
2 I am Peter Peter

其中1,3和2是“彼得”的出现.

我尝试了这个,但信息没有按照我想要的方式格式化:

grep -o -n Peter inputfile

解决方法:

使用grep不容易解决这个问题,我建议将“一个工具”移到awk:

awk '$0 ~ FS { print NF-1, $0 }' FS="Peter" inputfile

输出

1 I am Peter
3 I am Peter Peter Peter
2 I am Peter Peter

编辑

要回答评论中的问题:

What if I want case insensitive? and what if I want multiple pattern
like “Peter|Mary|Paul”, so “I am Peter peter pAul Mary marY John”,
will yield the count of 5?

如果您使用的是GNU awk,可以通过启用IGnorECASE并在FS中设置模式来实现:

awk '$0 ~ FS { print NF-1, $0 }' IGnorECASE=1 FS="Peter|Mary|Paul" inputfile

输出

1 I am Peter
1 I am Mary
3 I am Peter Peter Peter
2 I am Peter Peter
5 I am Peter peter pAul Mary marY John

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐