0

我正在使用“zgrep”从一些 apache/nginx 日志中查找一些 ip,我需要一种方法来仅对正面结果进行排序。

我正在使用这个:

for i in `cat /var/tmp/list_of_ip.txt`; do
    zgrep -arcH $i /webstats/some_website/*/*.2012-10-1{7..9}* ;
done

有很多日志文件。我只想知道哪些返回了积极的结果。

他们中的大多数会0在最后打印表明没有找到任何东西,有些会打印匹配的数量。如何仅选择那些并在文件中输出结果?

谢谢。

4

2 回答 2

4

您希望避免每个日志文件多次解压缩,因此您应该使用:

zgrep -l -F -f /var/tmp/list_of_ip.txt /webstats/some_website/*/*.2012-10-1{7..9}*

这将解压日志文件一次,grepfgrep模式 ( -F) 运行并从文件 ( ) 中读取要查找的单词列表(IP 地址)-f /var/tmp/list_of_ip.txt,并仅列出包含一个或多个匹配 IP 的文件的文件名地址 ( -l)。 fgrepmode 查找没有元字符的单词;如果您需要元字符,我认为您可以使用grep -E(带有-f选项)。您可以根据需要添加您的设置-r选项;-arcH在这种情况下,其他人是多余的。

正如选项所报告的,在 Mac OS X 10.7.5 上使用zgrep (gzip) 1.3.12和进行了一些临时测试。grep (GNU grep) 2.5.1--version

于 2012-10-31T04:11:13.027 回答
0

想我已经明白了..,只需在其中扔另一个grep文件,在它们的末尾包含“:0”的结果!

for i in `cat /var/tmp/list_of_ip.txt`
do zgrep -arcH $i /webstats/some_website/*/*.2012-10-1{7..9}* | grep -v :0$
done
于 2012-10-31T04:01:49.650 回答