如何计算文件夹中所有文件中特定字符串的所有出现次数?
例如,
1.txt:'哈哈哈哈哈'
2.txt:'哈哈'
我想计算这些文件中所有出现的“ha”。
我试过:
grep "ha" * | wc-l
Run Code Online (Sandbox Code Playgroud)
但它只是给了我文件输出中的个别事件
你很接近。要获取文件夹中所有 .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 一次。