linux - grep 显示每行出现的模式

标签 linux bash grep

从输入文件:

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/

相关文章:

java - GREP 如何只检索包含指定字母的单词?

c - linux/bin/ld : cannot find -lrtdk Xenomai

linux - 如何使用 SSH 命令将递归目录和文件列表导出到 Linux Bash shell 中的文本文件?

linux检查文件是否包含在文件中

linux - 从各种文件夹中获取所有文件并使用唯一名称复制它们

Bash - 将所有输出发送到日志文件,但显示错误

unix - ps –ef|grep java 和 ps –ef|grep *.java 的区别

html - 浏览器从标准输入读取 HTML

linux - 如何将 **long_options option <offset aHelp, 0, 0, 68h>** 翻译成重新汇编代码?

python - 使用不同的 mac 地址作为源模拟 1K Web 客户端