如何计算文件夹中所有文件中特定字符串出现的所有次数?
例如,
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。