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

ace*_*ner 4 linux grep

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

例如,

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

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

我试过:

grep "ha" * | wc-l 
Run Code Online (Sandbox Code Playgroud)

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

fly*_*ger 5

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

grep -o "ha" *.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

来自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.
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为 每个匹配项都打印在单独的行上,因此可以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
Run Code Online (Sandbox Code Playgroud)

解释:

find *.txt - 查找 .txt 文件

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

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

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

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