Linux下如何统计指定时间范围日志文件中特定文本的出现次数
问题原因
你之前追加xargs wc -l不生效,是因为xargs的作用是将前序命令的标准输出作为参数传递给后序命令,而你前面grep输出的是匹配到的文本内容,不是文件路径,wc将文本内容当做文件名读取自然无法得到正确结果。
解法1:统计包含目标文本的总行数
直接将grep的输出通过管道传给wc -l即可,不需要加xargs。这里用find的-print0参数和xargs的-0参数配合,可以正确处理包含空格、换行等特殊字符的文件名,避免命令执行异常:
find . -maxdepth 1 -newermt "2021-10-06 02:06:00" ! -newermt "2021-10-06 06:30:00" -print0 | xargs -0 grep "text" | wc -l
解法2:统计目标文本的总出现次数(单行多次匹配算多次)
如果某一行内目标文本可能出现多次,且需要单独统计每次出现,可使用grep -o参数仅输出匹配到的内容,每个匹配单独占一行后再统计行数:
find . -maxdepth 1 -newermt "2021-10-06 02:06:00" ! -newermt "2021-10-06 06:30:00" -print0 | xargs -0 grep -o "text" | wc -l
内容的提问来源于stack exchange,提问作者Mitesh Parikh
相关产品推荐
相关产品推荐

