O gzip opera como um fluxo do primeiro byte ao último byte; você não pode começar a descomprimir no meio. A maioria das ferramentas de compactação faz isso porque, se você permitir a descompactação a partir do meio, não estará aproveitando ao máximo as semelhanças entre o início e o fim. Então, para pesquisar uma string em um arquivo gzip, você precisa descompactar o arquivo inteiro de qualquer maneira (pelo menos até a primeira partida, se você estiver interessado apenas na primeira partida).
Além disso, tac
inverteria as linhas, não os bytes. Como um arquivo descompactado não é dividido em linhas (elas são arquivos binários, em que uma quebra de linha é um byte como qualquer outro), isso poderia transformar o arquivo em algo inutilizável.
Você pode reverter o arquivo descompactado:
zcat zipped.gz | tac | grep -m1 pattern
No entanto, isso não é necessariamente mais rápido do que pesquisar o arquivo inteiro, porque tac
em si não é tão rápido (a maioria dos aplicativos é lida do começo ao fim, então os kernels otimizam esse caso e tac
tem que testar cada byte para ver se é uma nova linha). Se você quer apenas a última linha, você pode extraí-la:
zcat zipped.gz | grep pattern | tail -n1