grep -G '{string}' *. | wc -l
{string}
给我整个目录中的总计数。另一方面,它wc -l *.
给了我每个文件每行的计数,但不是{string}
我感兴趣的每个文件的计数。我正在寻找两者的组合,其中我可以{string}
单独计算每个文件的出现次数。
答案1
这grep您需要的选项是-c
:
-C
仅将所选行的计数写入标准输出。
如果您有要在其中搜索的嵌套目录:
find /your_dir -type f -exec grep -cF '{string}' {} +
或者如果GNU Grep
您可以使用(或任何其他实现)grep它支持-r
) 进行递归搜索:
grep -rcF '{string}' your_dir
如果目录内部不包含子目录,则简单:
grep -cF '{string}' your_dir/*
将工作。
另请注意,-G
(GNU Grep
特定)启用BRE
引擎,这是默认选择,并且不处理ERE
类似标签{
(如果未转义)。考虑使用-F
选项强制grep搜索简单字符串或在不需要时禁用正则表达式元字符插值。
答案2
grep
的选项-c
打印每个文件所选行的计数。
grep -c '{string}' *.
(选项-G
(基本正则表达式)是多余的,因为这是默认值。)
使用示例文件
file1
foo
bar
baz
foo
bar
file2
foo
bar
baz
foo
bar
foo
foo
bar
bar foo
baz
foo
bar
我得到这个结果:
$ fgrep -c foo file*
file1:2
file2:6
如果您的文件名模式仅匹配一个文件,grep
则不会打印该文件名。为了避免这种情况,-H
如果你有 GNU ,你可以使用选项grep
。
grep -cH '{string}' *.
(添加/dev/null
而不是非标准选项-H
将显示此附加文件的计数 0。)