Cómo usar zgrep para averiguar qué número de línea o proporcionar información contextual. rodeando un archivo .gz

Cómo usar zgrep para averiguar qué número de línea o proporcionar información contextual. rodeando un archivo .gz

En Debian puede usar zgrep para buscar en un archivo comprimido. La razón para crear un archivo gunzip es bastante fácil, los archivos como los registros de cambios son enormes y pueden comprimirse mucho. El problema es que con zgrep solo obtienes una línea específica y no hay información arriba ni abajo. para dar información contextual. sobre el cambio mismo. Un ejemplo para ilustrar -

usr/share/doc/intel-microcode$ zgrep Fallout changelog.gz
  * Implements MDS mitigation (RIDL, Fallout, Zombieload), INTEL-SA-00223
  * Implements MDS mitigation (RIDL, Fallout, Zombieload), INTEL-SA-00223

Ahora, como puede verse, parece que mi chip se vio afectado por errores de RIDL, Fallout y Zombieload que parecen haber sido solucionados mediante un parche de software INTEL-SA-00223 que se menciona pero, como puede verse, está bastante incompleto.

La salida es usar zless y luego /RIDL o cualquiera de las otras palabras clave y luego ya sabes, pero quiero saber si hay alguna otra manera o si esa es la única solución. FWIW se enteró de que los errores se mitigaron el 14 de mayo de 2019, cuando Intel realizó parches de software que afectaron estos y otros problemas en esa fecha. Intenté usar 'cabeza' y 'cola' usando tuberías, pero ninguna de ellas resultó ser efectiva.

Respuesta1

zutiles(empaquetado en Debian) proporciona una versión más capaz zgrepque admite todos los parámetros contextuales habituales:

$ zgrep -C3 Fallout /usr/share/doc/intel-microcode/changelog.Debian.gz

  * New upstream microcode datafile 20190618
    + SECURITY UPDATE
      Implements MDS mitigation (RIDL, Fallout, Zombieload), INTEL-SA-00223
      CVE-2018-12126, CVE-2018-12127, CVE-2018-12130, CVE-2019-11091
      for Sandybridge server and Core-X processors
    + Updated Microcodes:
--

  * New upstream microcode datafile 20190514
    + SECURITY UPDATE
      Implements MDS mitigation (RIDL, Fallout, Zombieload), INTEL-SA-00223
      CVE-2018-12126, CVE-2018-12127, CVE-2018-12130, CVE-2019-11091
    + New Microcodes:
      sig 0x00030678, pf_mask 0x02, 2019-04-22, rev 0x0838, size 52224

Puedes instalarlo con sudo apt install zutils.

Respuesta2

Puedes usar zcaty un normal grep:

zcat changelog.gz | grep -C3 "Fallout"

-C3indica grepque proporcione 3 líneas de contexto (3 arriba, 3 abajo). Reduce esto si quieres menos contexto.

Puedes adaptar esto aún más usando -B<number>y/o -A<number>en su lugar (para "antes" y "después" respectivamente).

Respuesta3

También es sólo una solución alternativa, pero ¿lo intentaste?

gzip -cd changelog.gz | grep -C <num_lines> "Fallout"

¿ Para mostrar num_linesel contexto antes y después del partido (usar -A <num_after>y -B <num_before>afinar)?

información relacionada