当搜索文件中某个字符串出现的次数时,我通常使用:
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/