从输入文件:
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)
这不容易解决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)