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



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

例如:

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

输出:

9月9日 17:12:

47 145.247.1.62 cap-s12-custfw-1:NetScreen device_id=cap-s12-custfw-1 [根]系统信息-00542:BGP 对等体 10.24.224.187 更改为空闲状态 (2016-09-09 17:13:15(

如果有更简单的方法可以做到这一点,请让我。

如果您已经安装了zgrep,则不必zcat该文件。zgrep 的全部意义在于让你直接 grep gzip 文件。因此,您应该能够简单地执行此操作:

zgrep BGP *.gz | grep 145.247.1.62

这也应该稍微提高性能。

zgrep 'BGP.*145.247.1.62' $dir/*.gz呢?

(或者为了获得与两个zgrep调用序列等效的结果,您还必须 zgrep 两个正则表达式的反序,就像zgrep 'BGP.*145.247.1.62|145.247.1.62.*BGP' $dir/*.gz一样

GNU 并行搜索它们:

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

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

相关内容

  • 没有找到相关文章

最新更新