0

我在 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)

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

4

3 回答 3

2

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

zgrep BGP *.gz | grep 145.247.1.62

这也应该稍微提高性能。

于 2017-02-05T19:49:48.500 回答
1

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

(或者要获得与您的两个zgrep调用序列相同的结果,您还必须 zgrep 两个正则表达式的相反顺序,例如zgrep 'BGP.*145.247.1.62\|145.247.1.62.*BGP' $dir/*.gz.)

于 2017-02-05T19:53:51.483 回答
0

使用GNU Parallel 并行搜索它们:

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

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

于 2017-02-05T19:55:00.180 回答