Zip形式で圧縮されたファイルから特定の文字列を含む行を抽出する方法|zgrepとzegrepの使い方

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, テキスト処理 > Zip形式で圧縮されたファイルから特定の文字列を含む行を抽出する方法|zgrepとzegrepの使い方
「gzip圧縮されたファイルをgrepで検索しようとしたが、結果が出ない」
「.gzファイルを解凍せずにそのまま文字列検索したい」
gzip圧縮ファイル(.gz)に対して通常の grep コマンドを実行しても、バイナリデータとして認識されて正しく検索できません。
そのような場合は zgrepzegrep コマンドを使うと、解凍せずにそのまま文字列を検索できます。

この記事では、zgrepコマンドを使ってgzip圧縮ファイルを検索する方法を解説します。

【この記事でわかること】
・zgrepコマンドで.gzファイルを解凍せずに検索する方法
・zegrepとzfgrepとの違い
・grep・zgrep・zgrepの使い分け
・ローテートされたログファイルを横断検索する実務的な方法

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜ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の違い

zgrepzegrepzfgrep の違いは、通常の grepegrepfgrep の違いと同じです。

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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。