繁体   English   中英

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

[英]Find a line in a list of .gz files

我在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 [Root] system-information-00542:BGP对等体10.24.224.187更改为空闲状态(2016-09 -09 17:13:15)

如果有更简便的方法,请让我。

如果您已经安装了zgrep ,则不必对文件进行zcat处理。 zgrep的全部目的是让您直接grep压缩文件。 因此,您应该能够执行以下操作:

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 ,例如zgrep 'BGP.*145.247.1.62\\|145.247.1.62.*BGP' $dir/*.gz 。)

使用GNU Parallel并行搜索它们:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM