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

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

grep pattern file | wc -l

但是,由于grep的工作方式,每行只发现一次。 如何搜索字符串在文件中出现的次数,而不管它们是否在相同或不同的行上?

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


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

echo afoobarfoobar | grep -o foo | wc -l

man grep当然(:

更新

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

别。

这种快捷方式在任何情况下都不起作用。 手册页说:

-c print a count of matching lines

下面说明这些方法的不同之处:

1。

$ echo afoobarfoobar | grep -oc foo
1

只要在该行a{foo}barfoobar )中找到匹配a{foo}barfoobar ,搜索就会停止。 只有一行被检查并匹配,所以输出是1 。 其实-o在这里被忽略,你可以使用grep -c代替。

2。

$ echo afoobarfoobar | grep -o foo
foo
foo

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

因为我们明确要求查找每个出现-o ),所以在该行中找到了两个匹配项( a{foo}bar{foo}bar )。 每个事件都被打印在一个单独的行上,而wc -l只是计算输出中的行数。


迟到的帖子:
awk使用搜索正则表达式模式作为记录分隔符(RS)
这允许你的正则表达式跨越n -delimited行(如果你需要的话)。

printf 'X n moo Xn XXn' | 
   awk -vRS='X[^X]*X' 'END{print (NR<2?0:NR-1)}'

尝试这个:

grep“字符串来搜索”FileNameToSearch |“ cut -d“:”-f 4 | sort -n | uniq -c

示例:grep“SMTP连接来自未知”maillog | cut -d“:”-f 4 | sort -n | uniq -c

  6  SMTP connect from unknown [188.190.118.90]
 54  SMTP connect from unknown [62.193.131.114]
  3  SMTP connect from unknown [91.222.51.253]
链接地址: http://www.djcxy.com/p/19691.html

上一篇: Count number of occurrences of a pattern in a file (even on same line)

下一篇: What's the cmd/powershell equivalent of back tick on bash?