计算文件夹中所有文件中某个字符串的出现次数

计算文件夹中所有文件中某个字符串的出现次数

如何计算文件夹中所有文件中特定字符串出现的所有次数?

例如,

1.txt: '哈哈哈呵呵'
2.txt: '哈哈'

我想计算这些文件中所有出现的“ha”的次数。

我试过:

grep "ha" * | wc-l 

但它只是给我文件输出中的个别事​​件

答案1

你已经接近了。要获取文件夹中所有 .txt 文件中“ha”出现次数的总数:

grep -o "ha" *.txt | wc -l

man grep

-o, --only-matching
       Print only the matched (non-empty) parts of a matching line, with
       each such part on a separate output line.

这是因为 每个匹配项打印在单独的行上,从而可以wc -l对所有匹配项进行计数。

但是,默认情况下,grep 只会查找一行中的第一个匹配项并输出整行。同样,option-c只会查找所有行中的第一个匹配项,然后输出有多少行有 1 个(或更多)匹配项。

编辑:

以下是打印每个单独文件(带有文件名)中出现的总次数的一种方法:

find *.txt -printf 'echo "$(grep -o "ha" %p | wc -l) %p";' | sh

#Example output
3 file1.txt
1 file2.txt

解释:

find *.txt- 查找 .txt 文件

-printf- 将单引号之间的所有内容(格式化)打印到标准输出,%p用 find 的输出(文件名)替换出现的

$(grep -o "ha" %p | wc -l)- 工作原理如上所述

| sh- 输出-printf(命令)通过管道传输到 shell 并执行

请注意,每个文件名都会调用一次 printf。

答案2

不要使用,而是grep尝试使用ag -c ha 银搜索者

1.txt:3
2.txt:1

它更快!如果你使用 ubuntu,你可以安装包silversearcher-ag

相关内容