如何使用 zgrep 找出行号或提供一些上下文信息。围绕 .gz 文件

shi*_*ish 2 logs debian gzip regular-expression

在 Debian 中,您可以使用 zgrep 对经过枪压缩的存档文件进行 grep。制作 gunzip 文件的原因很简单,诸如变更日志之类的文件很大,可以高度压缩。问题在于 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
Run Code Online (Sandbox Code Playgroud)

现在可以看出,我的芯片似乎受到了 RIDL、Fallout 和 Zombieload 错误的影响,这些错误似乎已被提到的软件补丁 INTEL-SA-00223 修复,但可以看出它非常不完整。

出路是使用 zless 然后使用 / RIDL 或任何其他关键字,然后您知道但我想知道是否有其他方法或者这是唯一的解决方法?FWIW 确实知道这些错误在 2019 年 5 月 14 日得到缓解,英特尔在该日期制作了影响这些和其他各种问题的软件补丁。我确实尝试使用管道使用“头”和“尾”,但事实证明它们都没有效果。

Adm*_*Bee 5

这也只是一种解决方法,但您是否尝试过

gzip -cd changelog.gz | grep -C <num_lines> "Fallout"
Run Code Online (Sandbox Code Playgroud)

num_lines在匹配之前和之后显示上下文(使用-A <num_after>和-B <num_before>微调)?


bxm*_*bxm 5

您可以使用zcat和正常的grep:

zcat changelog.gz | grep -C3 "Fallout"
Run Code Online (Sandbox Code Playgroud)

-C3告诉grep提供 3 行上下文(上面 3 行,下面 3 行)。如果您想要更少的上下文,请减少此设置。

您可以通过使用-B<number>和/或-A<number>代替(分别用于“之前”和“之后”)来进一步定制。


Ste*_*itt 5

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
Run Code Online (Sandbox Code Playgroud)

您可以使用sudo apt install zutils.