从输入文件:
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 是“Peter”的出现。
我试过了,但是信息的格式不是我想要的:
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
关于linux - grep 显示每行出现的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31592531/