search - 计算文件中某个模式的出现次数(即使在同一行)

标签 search count grep match

当搜索文件中某个字符串出现的次数时,我通常使用:

grep pattern file | wc -l

但是,由于 grep 的工作方式,每行只能找到一次出现的情况。如何搜索字符串在文件中出现的次数,无论它们是在同一行还是不同行?

此外,如果我正在搜索正则表达式模式而不是简单的字符串怎么办?我如何计算这些,或者更好的是,在新行上打印每个匹配项?

最佳答案

要计算所有出现次数,请使用-o。试试这个:

echo afoobarfoobar | grep -o foo | wc -l

当然还有man grep(:

更新

有些人建议仅使用 grep -co foo 而不是 grep -o foo | wc -l <​​.

不要。

此快捷方式并非在所有情况下都有效。手册页显示:

-c print a count of matching lines

这些方法的差异如下所示:

1.

$ echo afoobarfoobar | grep -oc foo
1

一旦在行中找到匹配项 (a{foo}barfoobar),搜索就会停止。仅检查了一行并匹配,因此输出为 1。实际上 -o 在这里被忽略,你可以只使用 grep -c 代替。

2.

$ echo afoobarfoobar | grep -o foo
foo
foo

$ echo afoobarfoobar | grep -o foo | wc -l
2

在行 (a{foo}bar{foo}bar) 中找到两个匹配项,因为我们明确要求查找每个出现 (-o)。每次出现都打印在单独的行上,并且 wc -l 仅计算输出中的行数。

关于search - 计算文件中某个模式的出现次数(即使在同一行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2908757/

相关文章:

search - 是否可以将子目录提交到目录以用于 seo 目的?

python - 在 python 中使用 sklearn 自己的估计器进行网格搜索 CV

Java程序-单词统计

PHP Mysqli 显示计数总和的结果

Ubuntu grep 不会删除不需要的行

regex - 我可以执行 'non-global' grep 并仅捕获为每行输入找到的第一个匹配项吗?

algorithm - 二元搜索与三元搜索

elasticsearch - 如何根据elasticsearch中索引字段值(数据)的优先级获取搜索结果

c - 检查 count-- 在 for 循环中会取消循环吗?

bash - 提取出现在特定单词之后的单词