当前位置:  开发笔记 > 编程语言 > 正文

使用grep计算许多文件中所有出现的字符串

如何解决《使用grep计算许多文件中所有出现的字符串》经验,为你挑选了9个好方法。

我有一堆日志文件.我需要找出所有文件中出现字符串的次数.

grep -c string *

回报

...
file1:1
file2:0
file3:0
...

使用管道我只能获得具有一个或多个出现次数的文件:

grep -c string * | grep -v :0

...
file4:5
file5:1
file6:2
...

我怎样才能得到合并计数?(如果它返回file4:5, file5:1, file6:2,我想回来8.)



1> 小智..:

这适用于每行多次出现:

grep -o string * | wc -l


这也有效:`grep -o string*--exclude-dir = some/dir/one/--exclude-dir = some/dir/two | wc -l`.
`grep -ioR string*| wc -l`是我用来做一个不区分大小写,递归,仅匹配的搜索

2> Bombe..:
cat * | grep -c string


不解决一行中的多次出现
这具有相同的限制,即它仅在一行上计数多次出现次数.我猜这种行为在这种情况下是可以的.
我宁愿做`grep -c string <*`所以只需用小于的空格替换空格.
如果你想在子目录中搜索,这不起作用,而`grep -o`和`wc -l`也可以.尽管像原来的问题,猫更快.

3> 小智..:
grep -oh string * | wc -w

将计算一行中的多个事件


"grep -oh"......我的咖喱很强"*>> wc` :)

4> Michael Hare..:

而不是使用-c,只需将其传递给wc -l.

grep string * | wc -l

这将在一行中列出每个匹配项,然后计算行数.

但是,这将错过字符串在一行上出现2次以上的情况.


管道到"wc -l"也很适合"grep -r'test'." 它在当前目录下的所有目录中递归扫描字符串'test'的所有文件.

5> Joachim Saue..:
cat * | grep -c string

一个罕见的有用的应用程序cat.



6> Vijay..:

与以前的所有答案不同的是:

perl -lne '$count++ for m//g;END{print $count}' *



7> azmeuk..:

您可以-R递归地添加搜索(并避免使用cat)并-I忽略二进制文件.

grep -RIc string .



8> 小智..:

必须的AWK解决方案:

grep -c string * | awk 'BEGIN{FS=":"}{x+=$2}END{print x}'

如果您的文件名包含":",请注意.



9> 小智..:

AWK解决方案还处理文件名,包括冒号:

grep -c string * | sed -r 's/^.*://' | awk 'BEGIN{}{x+=$1}END{print x}'

请记住,这种方法仍不能发现多次出现string在同一行.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有