从某些日志中grep一些表达式,只选择具有正结果的表达式

时间:2012-10-31 02:40:50

标签: bash grep

我正在使用'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表示找不到任何内容,有些人会打印匹配数。如何只选择那些并在文件中输出结果?

感谢。

2 个答案:

答案 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.12grep (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