从输入文件:
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
答案 0 :(得分:8)
使用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 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
答案 1 :(得分:0)
您不需要-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
- 它只显示了行号,而不是出现次数。
看起来你正试图计算每行“彼得”的数量。你需要的东西超过一个grep。 awk
可能是个不错的选择。或者你可以遍历每一行,分成单词(比如一个数组)和grep -c
每行的数组,打印行的计数。