如何计算目录中每个文件中字符串的出现次数?

如何计算目录中每个文件中字符串的出现次数?

grep -G '{string}' *. | wc -l{string}给我整个目录中的总计数。另一方面,它wc -l *.给了我每个文件每行的计数,但不是{string}我感兴趣的每个文件的计数。我正在寻找两者的组合,其中我可以{string}单独计算每个文件的出现次数。

答案1

您需要的选项是-c

-C

仅将所选行的计数写入标准输出。


如果您有要在其中搜索的嵌套目录:

使用+:

find /your_dir -type f -exec grep -cF '{string}' {} +

或者如果GNU Grep您可以使用(或任何其他实现)它支持-r) 进行递归搜索:

grep -rcF '{string}' your_dir

如果目录内部不包含子目录,则简单:

grep -cF '{string}' your_dir/*

将工作。


另请注意,-GGNU Grep特定)启用BRE引擎,这是默认选择,并且不处理ERE类似标签{(如果未转义)。考虑使用-F选项强制搜索简单字符串或在不需要时禁用正则表达式元字符插值。

答案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。)

相关内容