用 grep -o "关键词" 文件名 | wc -l 可统计关键词在文件中实际出现的总次数(含一行多次);加 -i 忽略大小写,加 -w 匹配完整单词,特殊字符需用单引号包裹。

直接用 grep -o "关键词" 文件名 | wc -l 就能统计关键词在文件中实际出现的总次数(含一行多次)。
统计关键词在单个文件中的总出现次数
当一行里可能包含多个相同关键词时,用 -o 参数让 grep 每次只输出匹配到的关键词本身,再由 wc -l 统计行数,结果就是关键词真实出现的次数。
-
grep -o "ERROR" app.log | wc -l→ 统计所有 ERROR 实例(哪怕同一行出现 5 次,也计为 5) - 不加
-o的grep "ERROR" app.log | wc -l只统计含 ERROR 的行数,不是关键词次数 - 想忽略大小写,加
-i:如grep -io "error" app.log | wc -l
统计关键词在多个日志文件中的总次数
对当前目录下所有 .log 文件递归搜索并汇总次数,推荐用 -r(递归)+ -o:
-
grep -ro "404" *.log | wc -l→ 匹配所有.log文件中的 404,并统计全部出现次数 - 若要搜索子目录下的所有日志(不限后缀),可用
grep -ro "timeout" logs/ | wc -l - 注意:
grep -r默认会显示“文件名:匹配内容”,但wc -l只数行数,不影响总数
快速验证是否匹配成功
执行前可先试运行 grep 部分,确认输出是否符合预期:
-
grep -o "WARN" access.log | head -5→ 看前 5 次匹配结果,检查是否为真正想统计的内容 -
grep -ow "user" auth.log | wc -l→ 加-w确保只匹配完整单词 user,避免匹配到 username - 若关键词含特殊字符(如
$、.),建议用单引号包裹:grep -o '\$' script.sh | wc -l
替代方案:用 grep -c 统计匹配行数
如果只需要知道有多少行包含该关键词(而非关键词总出现次数),更简洁的方式是:
-
grep -c "FATAL" system.log→ 直接输出含 FATAL 的行数 -
grep -ci "debug" *.log→ 忽略大小写,统计每个.log文件中含 debug 的行数(分别列出) - 注意:
-c不支持-o,两者不可共用;它统计的是“行”,不是“词”


















