zgrep を使用して .gz ファイルの行番号を調べたり、コンテキスト情報を取得したりする方法

zgrep を使用して .gz ファイルの行番号を調べたり、コンテキスト情報を取得したりする方法

Debian では、zgrep を使用して gunzip されたアーカイブ ファイルを 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

ご覧のとおり、私のチップは RIDL、Fallout、Zombieload のバグの影響を受けているようです。これらのバグは、記載されているソフトウェア パッチ INTEL-SA-00223 によって修正されたようですが、ご覧のとおり、かなり不完全です。

解決策としては、zless を使用し、次に / RIDL またはその他のキーワードを使用することですが、他に方法があるか、それが唯一の回避策であるかを知りたいです。参考までに、2019 年 5 月 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"

-C33 行のコンテキスト (上に 3 行、下に 3 行) を提供するように指示しますgrep。コンテキストを少なくしたい場合は、この値を減らします。

-B<number>代わりにand/or -A<number>(それぞれ「前」と「後」)を使用して、これをさらにカスタマイズできます。

答え3

これも回避策に過ぎませんが、試してみましたか?

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

num_lines一致の前後のコンテキストを表示するには(微調整するには-A <num_after>と を使用)?-B <num_before>

関連情報