С использованием 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*(//|#)).*$::
заменяется пустой строкой, если ниже видны совпадения. \s\{1,\}(//|#)
:любые строки, за которыми следует //
или(|
)#
с одним или несколькими пробелами -перед этим, это сохранит ссылки, такие какhttps://domain
(спасибо, @Phillippos указал на это)|^\s*(//|#)
:любые строки начинаются с пробелов -, за которыми следует //
или#
.*$
соответствует элементу выше элемента 1 или элементу 2 и всему после этого до конца строки.*$
/^$/d
:удаляет пустые строки. если вы хотите удалить строки, содержащие пробелы -, также замените их на /^\s*$/d
. 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
.
Это также только обходной путь, но пробовали ли вы
gzip -cd changelog.gz | grep -C <num_lines> "Fallout"
для отображения num_lines
контекста до и после совпадения (используйте -A <num_after>
и -B <num_before>
для точной -настройки )?
Вы можете использовать zcat
и обычныйgrep
:
zcat changelog.gz | grep -C3 "Fallout"
-C3
сообщает grep
предоставить 3 строки контекста (3 вверху, 3 внизу ). Уменьшите это, если вы хотите меньше контекста.
Вы можете дополнительно настроить это, используя -B<number>
и/или -A<number>
вместо (для «до» и «после» соответственно.)