Как использовать zgrep, чтобы узнать номер строки или получить некоторую контекстную информацию, окружающую файл .gz

Как использовать zgrep, чтобы узнать номер строки или получить некоторую контекстную информацию, окружающую файл .gz

В Debian вы можете использовать zgrep для grep через gunzip-архивный файл. Причина создания gunzip-файла достаточно проста, такие файлы, как changelogs, огромны и могут быть сильно сжаты. Проблема в том, что с zgrep вы получаете только определенную строку и никакой информации выше или ниже. для предоставления контекстной информации. о самом изменении. Пример для иллюстрации -

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

Теперь, как вы видите, похоже, что мой чип был затронут ошибками RIDL, Fallout и Zombieload, которые, похоже, были исправлены программным патчем INTEL-SA-00223, который упоминается, но, как вы видите, он довольно неполный.

Выход - использовать zless, а затем / RIDL или любые другие ключевые слова, и тогда вы знаете, но я хочу знать, есть ли другой способ или это единственный обходной путь? FWIW узнал, что ошибки были смягчены 2019-05-14, когда Intel выпустила программные исправления, затрагивающие эти и различные другие проблемы в тот день. Я пробовал использовать 'head' и 'tail' с помощью каналов, но ни один из них не оказался эффективным.

решение1

Зутилс(упаковано в Debian) предоставляет более функциональную версию, zgrepкоторая поддерживает все обычные контекстные параметры:

$ 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

Вы можете установить его с помощью sudo apt install zutils.

решение2

Вы можете использовать zcatи обычный grep:

zcat changelog.gz | grep -C3 "Fallout"

-C3говорит grepпредоставить 3 строки контекста (3 выше, 3 ниже). Уменьшите это, если вы хотите меньше контекста.

Вы можете дополнительно адаптировать это, используя -B<number>and/or -A<number>вместо (для «до» и «после» соответственно).

решение3

Это всего лишь обходной путь, но вы пробовали

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

для отображения num_linesконтекста до и после совпадения (используйте -A <num_after>и -B <num_before>для точной настройки)?

Связанный контент