![如何在日志文件中搜索特定模式并计算匹配的数量?](https://linux22.com/image/1402542/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%E4%B8%AD%E6%90%9C%E7%B4%A2%E7%89%B9%E5%AE%9A%E6%A8%A1%E5%BC%8F%E5%B9%B6%E8%AE%A1%E7%AE%97%E5%8C%B9%E9%85%8D%E7%9A%84%E6%95%B0%E9%87%8F%EF%BC%9F.png)
在一个非常大的日志文件中我有如下条目:
流程进入 somecompany.somepackage.datacontrol.provider.DataProvider@c37ae61。发布()
条目之间唯一的变化是之后@
和之前的字符串.release()
(加粗部分)。
还有其他条目需要从搜索中丢弃,例如:
流程进入 somecompany.somepackage.datacontrol.provider.DataProvider@c37ae61.其他东西()
所以我的搜索模式应该以.release()
。
我如何才能知道日志文件中这种情况出现的次数(匹配的行数)并打印出所有匹配的模式?
PS:我使用的是Linux环境。
答案1
我认为grep -c
选项是排他性的 - 不可能将 -c 选项与另一个选项组合来输出匹配的行和计数。因此使用 tee 输出匹配项和将匹配项写入临时文件,然后计算文件中的行数。
grep 'FLOW ENTERING.*release()' k | tee /tmp/grep.tmp && wc -l /tmp/grep.tmp
答案2
您可以使用
grep '.release()' file|wc -l