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

jrd*_*oko 90 search grep count match

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

grep pattern file | wc -l
Run Code Online (Sandbox Code Playgroud)

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

另外,如果我正在搜索正则表达式模式,而不是简单的字符串呢?我如何计算这些,或者甚至更好地在新线上打印每场比赛?

hud*_*jev 150

要计算所有事件,请使用-o.试试这个:

echo afoobarfoobar | grep -o foo | wc -l
Run Code Online (Sandbox Code Playgroud)

man grep当然,(:

更新

有人建议只使用grep -co foo而不是grep -o foo | wc -l.

别.

此快捷方式在所有情况下都不起作用.手册页说:

-c print a count of matching lines
Run Code Online (Sandbox Code Playgroud)

这些方法的不同之处如下所示:

1.

$ echo afoobarfoobar | grep -oc foo
1
Run Code Online (Sandbox Code Playgroud)

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

2.

$ echo afoobarfoobar | grep -o foo
foo
foo

$ echo afoobarfoobar | grep -o foo | wc -l
2
Run Code Online (Sandbox Code Playgroud)

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