「.gzファイルを解凍せずにそのまま文字列検索したい」
gzip圧縮ファイル(.gz)に対して通常の
grep コマンドを実行しても、バイナリデータとして認識されて正しく検索できません。そのような場合は
zgrep や zegrep コマンドを使うと、解凍せずにそのまま文字列を検索できます。この記事では、zgrepコマンドを使ってgzip圧縮ファイルを検索する方法を解説します。
・zgrepコマンドで.gzファイルを解凍せずに検索する方法
・zegrepとzfgrepとの違い
・grep・zgrep・zgrepの使い分け
・ローテートされたログファイルを横断検索する実務的な方法
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜgrepでgzipファイルを検索できないのか
通常のgrep コマンドは、ファイルの内容をそのまま読み込んで検索します。gzip圧縮ファイルは圧縮されたバイナリデータなので、
grep ではテキストとして解釈できず、検索結果が得られません。# grepで.gzファイルを検索しようとしても結果が出ない $ grep -i "new" country_list.txt.gz # (何も表示されない) # Binary file matches(バイナリとして認識される場合) $ grep "new" country_list.txt.gz Binary file country_list.txt.gz matches
zgrepで圧縮ファイルを検索する(基本)
zgrep は内部で zcat(gzip解凍して標準出力に出す)を使い、解凍しながらgrepで検索します。オプションは通常の
grep と同じように使えます。1. 基本的な使い方
# .gzファイルを解凍せずに "new" を含む行を検索 $ zgrep -i "new" country_list.txt.gz New Zealand Papua New Guinea # 大文字小文字を区別して検索 $ zgrep "New" country_list.txt.gz New Zealand Papua New Guinea
2. -nオプションで行番号も表示する
$ zgrep -n "New" country_list.txt.gz 128:New Zealand 145:Papua New Guinea
3. 複数のgzファイルをまとめて検索する
$ zgrep -i "new" *.gz country_list.txt.gz:New Zealand country_list.txt.gz:Papua New Guinea archive.txt.gz:New entry
zgrepとzegrepの違い
zgrep・zegrep・zfgrep の違いは、通常の grep・egrep・fgrep の違いと同じです。・zgrep:基本的な正規表現(BRE)を使って検索。通常はこれで十分
・zegrep:拡張正規表現(ERE)を使って検索。
+・?・| などが使える・zfgrep:固定文字列として検索。正規表現を使わないため高速
# zegrepで拡張正規表現を使って検索 $ zegrep -i "new|old" country_list.txt.gz New Zealand Papua New Guinea # zfgrepで固定文字列検索(正規表現不要) $ zfgrep "New Zealand" country_list.txt.gz New Zealand
実務での活用例:ローテートされたログファイルを横断検索する
Linuxのログはlogrotateで定期的にローテートされ、古いログは .gz で圧縮保存されます。過去のログも含めて検索したい場合は、
zgrep を活用します。1. 現在のログと圧縮ログを同時に検索する
# 現在のmessagesログ $ grep "error" /var/log/messages # 圧縮された過去のmessagesログ $ zgrep "error" /var/log/messages-*.gz # 全期間を一括検索(現在+圧縮) $ grep "error" /var/log/messages ; zgrep "error" /var/log/messages-*.gz
2. ローテートログから特定期間のエラーを検索する
# /var/log/配下の全.gzファイルから "authentication failure" を検索 $ zgrep -l "authentication failure" /var/log/*.gz /var/log/secure-20260301.gz /var/log/secure-20260308.gz
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| .gzファイルを検索(基本) | zgrep -i "文字列" ファイル.gz |
| 行番号も表示 | zgrep -n "文字列" ファイル.gz |
| 複数の.gzを一括検索 | zgrep "文字列" *.gz |
| 拡張正規表現で検索 | zegrep "pattern1|pattern2" ファイル.gz |
| マッチしたファイル名のみ表示 | zgrep -l "文字列" *.gz |
| 現在+圧縮ログを横断検索 | grep "..." /var/log/messages ; zgrep "..." /var/log/messages-*.gz |
Linuxのログ検索・管理コマンドを体系的に学びませんか?
zgrepのような応用コマンドも、grepの基礎があれば迷わず使えます。ログ管理の知識はサーバー運用の現場で毎日役立ちます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:tarコマンドでアーカイブを展開せずに中身を確認する方法|tvfオプションと圧縮形式別の使い方
- 前のページへ:Linuxの主要なログファイルを確認する方法|/var/log/配下の一覧とjournalctlの使い方
- この記事の属するカテゴリ:Linuxtips・テキスト処理へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます