grep以每行为基础显示模式的出现

Cin*_*ton 3 linux bash grep

从输入文件:

I am Peter
I am Mary
I am Peter Peter Peter
I am Peter Peter
Run Code Online (Sandbox Code Playgroud)

我希望输出是这样的:

1 I am Peter
3 I am Peter Peter Peter
2 I am Peter Peter
Run Code Online (Sandbox Code Playgroud)

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

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

grep -o -n Peter inputfile
Run Code Online (Sandbox Code Playgroud)

Tho*_*hor 8

这不容易解决grep,我建议将"一个工具"移到awk:

awk '$0 ~ FS { print NF-1, $0 }' FS="Peter" inputfile
Run Code Online (Sandbox Code Playgroud)

输出:

1 I am Peter
3 I am Peter Peter Peter
2 I am Peter Peter
Run Code Online (Sandbox Code Playgroud)

编辑

要回答评论中的问题:

如果我想要区分大小写怎么办?如果我想要像"彼得|玛丽|保罗"这样的多种模式,那么"我是彼得彼得·帕尔玛丽玛丽约翰",将会产生5的计数?

如果您使用的是GNU awk,可以通过启用IGNORECASE和设置模式来实现,FS如下所示:

awk '$0 ~ FS { print NF-1, $0 }' IGNORECASE=1 FS="Peter|Mary|Paul" inputfile
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)