我正在使用'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
表示找不到任何内容,有些人会打印匹配数。如何只选择那些并在文件中输出结果?
感谢。
答案 0 :(得分:4)
您希望避免每次解压缩日志文件多次,因此您应该使用:
zgrep -l -F -f /var/tmp/list_of_ip.txt /webstats/some_website/*/*.2012-10-1{7..9}*
这将解压缩日志文件一次,以grep
模式(fgrep
)运行-F
并从文件中读取要查找的字词列表(IP地址){{{ 1}}),并仅列出包含一个或多个匹配IP地址(-f /var/tmp/list_of_ip.txt
)的文件的文件名。 -l
模式查找没有元字符的单词;如果您需要元字符,我认为您可以使用fgrep
(使用grep -E
选项)。您可以根据需要添加-f
集的-r
选项;在这种情况下,其他的都是多余的。
根据-arcH
选项报告,在Mac OS X 10.7.5上使用zgrep (gzip) 1.3.12
和grep (GNU grep) 2.5.1
进行了一些临时测试。
答案 1 :(得分: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