在压缩文件上使用`tac`

Ram*_*eek 2 grep compression

tac unzipped.log | grep -m1 pattern工作得很好,但我无法tac在压缩文件上使用该命令。

tac zipped.gz | zgrep -m1 pattern 什么都不返回。

tac没有不解压我的文件就可以使用的方法?

Gil*_*il' 5

gzip 作为从第一个字节到最后一个字节的流运行;你不能在中间开始解压。大多数压缩工具都会这样做,因为如果您允许从中间解压缩,那么您就没有充分利用开头和结尾之间的相似性。因此,要在 gzipped 文件中搜索字符串,您无论如何都需要解压缩整个文件(至少在第一个匹配之前,如果您只对第一个匹配感兴趣)。

此外,tac将反转行,而不是字节。由于解压后的文件没有被分成几行(它们是二进制文件,其中换行符是一个字节),这会使文件变得无法使用。

您可以反转解压后的文件:

zcat zipped.gz | tac | grep -m1 pattern 
Run Code Online (Sandbox Code Playgroud)

然而,这并不一定比搜索整个文件快,因为tac它本身并没有那么快(大多数应用程序从头到尾读取,因此内核倾向于优化这种情况,然后tac必须测试每个字节以查看它是否换行符)。如果您只想要最后一行,则可以提取它:

zcat zipped.gz | grep pattern | tail -n1
Run Code Online (Sandbox Code Playgroud)