从输入文件中:
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
###编辑
回答评论中的问题:
如果我想不区分大小写怎么办?如果我想使用多个模式,例如“Peter | Mary | Paul”,那么“我是Peter peter pAul Mary marY John”将得到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
你不需要使用-o
或-n
。从grep --help
中得知:
-o, --only-matching show only the part of a line matching PATTERN
...
-n, --line-number print line number with output lines
删除它们,你的输出将会更好。我认为你误解了-n
的含义——它只显示行号,而不是出现次数。
看起来你想要获取每行“Peter”出现的次数。你需要使用不止一个grep命令。可以考虑使用awk
。或者你可以循环遍历每一行,将其拆分成单词(比如一个数组),并对每一行的数组使用grep -c
,以打印该行的计数。
|
、*
或括号(
和)
)。如果你搜索pepe
,而你有类似于pepepe
的东西,那么出现次数是多少呢?(它算作一次出现还是两次出现) - Luis Colorado