计算文件中某个模式的出现次数(即使在同一行上)
当搜索文件中字符串的出现次数时,我通常使用:
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?