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

С использованием sedдля сохранения ссылок и комментариев обоих типов //и#:

sed -E -e 's:(\s\{1,\}(//|#)|^\s*(//|#)).*$::; /^$/d' infile.txt

Или если комментарии только с //, то:

sed -E -e 's:(\s\{1,\}//||^\s*//).*$::; /^$/d' infile.txt

А если ссылки нет или вы не против ссылок, то будет еще короче:

sed -E -e 's:\s*//.*$::; /^$/d' infile.txt
  • Часть s:(\s\{1,\}(//|#)|^\s*(//|#)).*$::заменяется пустой строкой, если ниже видны совпадения.
    1. \s\{1,\}(//|#):любые строки, за которыми следует //или(|)#с одним или несколькими пробелами -перед этим, это сохранит ссылки, такие какhttps://domain(спасибо, @Phillippos указал на это)
    2. или|^\s*(//|#):любые строки начинаются с пробелов -, за которыми следует //или#
    3. .*$соответствует элементу выше элемента 1 или элементу 2 и всему после этого до конца строки.*$
    4. /^$/d:удаляет пустые строки. если вы хотите удалить строки, содержащие пробелы -, также замените их на /^\s*$/d.
2
26.11.2019, 04:07
3 ответа

Zutils (, упакованный в 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.

6
27.01.2020, 21:49

Это также только обходной путь, но пробовали ли вы

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

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

5
27.01.2020, 21:49

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

zcat changelog.gz | grep -C3 "Fallout"

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

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

5
27.01.2020, 21:49

Теги

Похожие вопросы