在.gz文件列表中查找一行

时间:2017-02-05 19:45:26

标签: linux shell zcat

我在linux的特定目录中有大约50个.gz文件。我需要在每个文件中找到一个特定的行。目前我正在通过zcat做每个文件。

例如:

zcat 20160909-custfw.log.7.gz | zgrep BGP | zgrep  145.247.1.62

输出:

  

Sep 9 17:12:47 145.247.1.62 cap-s12-custfw-1:NetScreen   device_id = cap-s12-custfw-1 [Root] system-information-00542:BGP对等体   10.24.224.187改为空闲状态(2016-09-09 17:13:15)

如果有更简单的方法,请告诉我。

3 个答案:

答案 0 :(得分:2)

如果您已安装zgrep,则不必zcat该文件。 zgrep的全部意义在于让你直接grep gzip文件。因此,您应该能够做到这一点:

zgrep BGP *.gz | grep 145.247.1.62

这也应该稍微提高性能。

答案 1 :(得分:1)

zgrep 'BGP.*145.247.1.62' $dir/*.gz怎么样?

(或者为了获得与两个zgrep调用序列相同的结果,你必须zgrep也是两个正则表达式的逆序,就像zgrep 'BGP.*145.247.1.62\|145.247.1.62.*BGP' $dir/*.gz一样。)

答案 2 :(得分:0)

GNU Parallel 并行搜索:

parallel zgrep BGP {} ::: *.gz | grep 145.247.1.62

如果您知道它只在每个文件中出现一次,或者只对第一次出现感兴趣,请使用zgrep -m1以避免费心阅读文件的其余部分并在第一次匹配时停止。