クリップボードにコピーしました!
文字列のgrep

grepでgzファイルを検索する方法を徹底解説

updated: 2026/07/18 created: 2026/07/18

はじめに

gzファイルはログやバックアップの保存で広く利用されていますが、通常のgrepではそのまま検索できず、初学者が戸惑いやすいポイントです。

展開してから検索する方法だけでなく、展開せずに効率よく検索する方法を知ることで、作業時間を大きく短縮できます。

本記事では、grepでgzファイルを扱うための基本から実践的な検索方法までを分かりやすく解説します。

参考: GNU grep

grepでgzファイルを検索する基本コマンド

ファイル作成

cat << 'EOF' > sample1.txt backup data EOF

ファイル作成

gzip -c sample1.txt > sample1.txt.gz

ファイル作成

cat << 'EOF' > sample2.txt access log EOF

ファイル作成

gzip -c sample2.txt > sample2.txt.gz

ファイル作成

cat << 'EOF' > sample3.txt database dump EOF

ファイル作成

gzip -c sample3.txt > sample3.txt.gz

実行コマンド

grep "backup" *.gz

実行結果

no output

実行コマンド

zgrep "backup" *.gz

実行結果

sample1.txt.gz:backup data

仕組み

項目 内容
grep 指定した文字列を検索するコマンド
zgrep .gzファイルを展開せずに検索するコマンド
*.gz カレントディレクトリ内のすべての.gzファイルを対象にする

解説

通常のgrepは圧縮された.gzファイルの内容をそのまま検索できません。

.gzファイル内の文字列を検索する場合は、zgrepを使用するのが一般的です。

grepでgzファイルを展開せずに検索する方法

ファイル作成

cat << 'EOF' > input.txt ERROR: Connection failed INFO: Service started ERROR: Disk full INFO: Backup completed EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

zgrep "ERROR" input.txt.gz

実行結果

ERROR: Connection failed
ERROR: Disk full

実行コマンド

zgrep -n "INFO" input.txt.gz

実行結果

2:INFO: Service started
4:INFO: Backup completed

仕組み

項目 内容
コマンド zgrep
対象 .gz形式の圧縮ファイル
展開 一時的に内部で展開するため、手動で解凍不要
検索処理 grepと同じ正規表現・オプションが利用可能
用途 圧縮ログファイルをそのまま検索したい場合に便利

解説

zgrepを使用すると、gzファイルを解凍せずに直接検索できます。
ログファイルの調査や容量の大きい圧縮ファイルの検索を効率よく行えるため、運用現場でもよく利用されるコマンドです。

grepで複数のgzファイルを検索する方法

ファイル作成

mkdir -p logs

ファイル作成

echo "INFO Application started" | gzip > logs/app1.log.gz echo "ERROR Database connection failed" | gzip > logs/app2.log.gz echo "INFO User login" | gzip > logs/app3.log.gz echo "ERROR Disk full" | gzip > logs/app4.log.gz

実行コマンド

zgrep "ERROR" logs/*.gz

実行結果

logs/app2.log.gz:ERROR Database connection failed
logs/app4.log.gz:ERROR Disk full

実行コマンド

zgrep -n "INFO" logs/*.gz

実行結果

logs/app1.log.gz:1:INFO Application started
logs/app3.log.gz:1:INFO User login

実行コマンド

zgrep -H "Database" logs/*.gz

実行結果

logs/app2.log.gz:ERROR Database connection failed

仕組み

項目 内容
zgrep gzip圧縮されたファイルを展開せずに検索できるコマンド
logs/*.gz 複数のgzファイルをまとめて指定するワイルドカード
-n 一致した行番号を表示する
-H 検索結果にファイル名を必ず表示する
検索処理 各gzファイルを一時的に展開し、grepと同様の検索を実行する

解説

grepでは圧縮されたgzファイルを直接検索できないため、通常はzgrepを使用します。
logs/*.gzのようにワイルドカードを指定することで、複数のgzファイルを一括検索できます。

grepでディレクトリ内のgzファイルを再帰的に検索する方法

ファイル作成

cat << 'EOF' > file1.txt ERROR Failed to connect database ERROR Authentication failed EOF

ファイル作成

gzip -c file1.txt > file1.txt.gz

ファイル作成

gzip -c file1.txt > file2.txt.gz

ファイル作成

gzip -c file1.txt > file3.txt.gz

実行コマンド

find . -type f -name "*.gz" -print0 | xargs -0 zgrep "ERROR"

実行結果

./file1.txt.gz:ERROR Failed to connect database
./file1.txt.gz:ERROR Authentication failed
./file3.txt.gz:ERROR Failed to connect database
./file3.txt.gz:ERROR Authentication failed
./file2.txt.gz:ERROR Failed to connect database
./file2.txt.gz:ERROR Authentication failed

仕組み

項目 説明
find 指定したディレクトリ配下を再帰的に検索する
-type f 通常ファイルのみを検索対象にする
-name "*.gz" 拡張子が.gzのファイルだけを抽出する
-print0 ファイル名に空白が含まれていても安全に渡せる形式で出力する
xargs -0 findの結果を安全にzgrepへ渡す
zgrep gzipファイルを展開せずに文字列検索を行う

解説

.gzファイルは通常のgrepでは直接検索できないため、zgrepを使用します。
findと組み合わせることで、ディレクトリ内のすべてのgzipファイルを効率よく検索できます。

grepでgzファイルと通常ファイルを同時に検索する方法

ファイル作成

cat << 'EOF' > input.txt sample text error: normal file warning: normal file EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

grep -H "error" input.txt <(gzip -cd input.txt.gz)

実行結果

input.txt:error: normal file
/dev/fd/63:error: normal file

実行コマンド

zgrep -H "error" input.txt.gz && grep -H "error" input.txt

実行結果

input.txt.gz:error: normal file
input.txt:error: normal file

仕組み

方法 仕組み 特徴
grep <(gzip -cd file.gz) gzip -cdでgzファイルを標準出力へ展開し、プロセス置換でgrepに渡す grepだけで通常ファイルとgzファイルを同時に検索できる
zgrep + grep zgrepがgzファイルを展開しながら検索し、通常ファイルはgrepで検索する ファイル名を保持したまま検索結果を表示しやすい

解説

通常ファイルとgzファイルを一度に検索したい場合は、gzip -cdをプロセス置換でgrepへ渡す方法が便利です。
ファイル名をそのまま表示したい場合は、zgrepとgrepを組み合わせる方法もよく利用されます。

grepでgzファイルを正規表現で検索する方法

ファイル作成

cat << 'EOF' > input.txt 2024-01-01 INFO Application started 2024-01-01 ERROR Database connection failed 2024-01-01 INFO Retry connection 2024-01-01 ERROR Authentication failed 2024-01-01 INFO Application stopped EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

grep "ERROR" <(gzip -cd input.txt.gz)

実行結果

2024-01-01 ERROR Database connection failed
2024-01-01 ERROR Authentication failed

実行コマンド

grep -E "ERROR|Retry" <(gzip -cd input.txt.gz)

実行結果

2024-01-01 ERROR Database connection failed
2024-01-01 INFO Retry connection
2024-01-01 ERROR Authentication failed

仕組み

項目 内容
コマンド grep
対象 プロセス置換で展開したgzファイルの内容
正規表現 -Eオプションで拡張正規表現を利用
プロセス置換 <(gzip -cd input.txt.gz)で解凍結果を標準入力として渡す

解説

gzip -cdでgzファイルを標準出力へ展開し、プロセス置換<(...)を使ってgrepへ渡しています。
-Eオプションを指定することで、ERROR|Retryのような複数条件の正規表現検索を実行できます。

grepでgzファイルから完全一致する文字列を検索する方法

ファイル作成

cat << 'EOF' > input.txt error warning info error EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

zgrep -x "error" input.txt.gz

実行結果

error
error

実行コマンド

zgrep -xc "error" input.txt.gz

実行結果

2

仕組み

項目 内容
zgrep gzip圧縮されたファイルを展開せずに検索するコマンド
-x 行全体が検索文字列と完全一致した場合のみ表示する
-c 一致した行数のみを表示する
input.txt.gz 検索対象のgzip圧縮ファイル

解説

zgrepは内部でgzipファイルを展開しながらgrepを実行するため、一時展開する必要がありません。

-xを指定すると、行全体が検索文字列と一致する場合のみヒットします。

grepでgzファイル内の複数キーワードを検索する方法

ファイル作成

cat << 'EOF' > input.txt INFO Start application ERROR Database connection failed WARN Retry connection INFO User login ERROR Timeout occurred WARN Disk usage high EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

zgrep -E 'ERROR|WARN' input.txt.gz

実行結果

ERROR Database connection failed
WARN Retry connection
ERROR Timeout occurred
WARN Disk usage high

実行コマンド

gzip -cd input.txt.gz | grep -E 'ERROR|WARN'

実行結果

ERROR Database connection failed
WARN Retry connection
ERROR Timeout occurred
WARN Disk usage high

仕組み

項目 内容
zgrep gzip圧縮されたファイルを展開しながら検索するコマンド
-E 拡張正規表現を使用し、ERROR|WARN のような複数キーワードを指定できる
| OR条件を表し、いずれかのキーワードに一致した行を検索する
gzip -cd gzファイルを標準出力へ展開する
grep -E 展開された内容に対して複数キーワードを検索する

解説

grepではgzファイルを直接検索できないため、zgrepまたはgzip -cdとパイプを組み合わせる方法を利用します。
複数キーワードはgrep -E 'キーワード1|キーワード2'の形式で指定できます。

grepでgzファイル内の一致件数を確認する方法

ファイル作成

cat << 'EOF' > input.txt INFO Start ERROR Connection failed INFO Retry ERROR Timeout INFO End EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

zgrep -c "ERROR" input.txt.gz

実行結果

2

実行コマンド

zgrep "ERROR" input.txt.gz | wc -l

実行結果

2

実行コマンド

gzip -cd input.txt.gz | grep -c "ERROR"

実行結果

2

仕組み

コマンド 仕組み 用途
zgrep -c "ERROR" input.txt.gz gzip圧縮ファイルを展開しながら検索し、一致件数のみを表示する 一致件数を素早く確認したい場合
zgrep "ERROR" input.txt.gz | wc -l zgrepで一致した行を出力し、その行数をwc -lで数える 一致した内容も確認しながら件数を数えたい場合
gzip -cd input.txt.gz | grep -c "ERROR" gzip -cdで標準出力へ展開し、その出力をgrep -cへパイプして一致件数を数える zgrepが利用できない環境や、展開後のデータを他のコマンドへ渡したい場合

解説

gzファイル内の文字列を検索するには、zgrepを使用する方法と、gzip -cdで展開した内容をgrepへ渡す方法があります。件数のみを確認する場合は、どちらも-cオプションを利用することで簡単に一致件数を取得できます。

grepでgzファイルの前後の行も表示する方法

ファイル作成

cat << 'EOF' > input.txt 2024-01-01 INFO Application Start 2024-01-01 INFO Loading config 2024-01-01 ERROR Database connection failed 2024-01-01 INFO Retry connection 2024-01-01 INFO Database connection success EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

grep -C 1 "ERROR" <(gzip -cd input.txt.gz)

実行結果

2024-01-01 INFO Loading config
2024-01-01 ERROR Database connection failed
2024-01-01 INFO Retry connection

仕組み

項目 内容
gzip -cd gzファイルを標準出力へ展開する (-c は標準出力、-d は展開)
<(...) プロセス置換により、展開結果を一時的なファイルのように grep へ渡す
grep -C 1 一致した行の前後1行を表示する
"ERROR" 検索する文字列
input.txt.gz 検索対象のgzファイル

解説

gzip -cdでgzファイルを標準出力へ展開し、その出力をプロセス置換<(...)でgrepへ渡しています。
これにより、ファイルを展開せずに通常のgrepコマンドで前後の行を含めた検索ができます。

grepでfindコマンドと組み合わせてgzファイルを検索する方法

ファイル作成

mkdir -p logs/app logs/archive

ファイル作成

echo "INFO: start" > logs/app/app.log

ファイル作成

echo "ERROR: disk full" > logs/app/error.log

ファイル作成

gzip logs/app/error.log

ファイル作成

echo "INFO: backup" > logs/archive/backup.log

ファイル作成

gzip logs/archive/backup.log

実行コマンド

find logs -name "*.gz"

実行結果

logs/app/error.log.gz
logs/archive/backup.log.gz

実行コマンド

find logs -name "*.gz" | grep "error"

実行結果

logs/app/error.log.gz

仕組み

仕組み 内容
find logs logsディレクトリ配下を再帰的に検索する
-name "*.gz" 拡張子が.gzのファイルだけを対象にする
| findの検索結果をgrepへ渡す
grep "error" パス名にerrorを含む.gzファイルだけを抽出する

解説

findで.gzファイルを検索し、その結果をgrepへ渡すことで目的のファイルだけを効率よく絞り込めます。

大量の.gzファイルがある環境でも必要なファイルを素早く検索できます。

grepでログローテートされたgzファイルを検索する方法

ファイル作成

cat << 'EOF' > input.txt 2025-07-01 10:00:01 INFO Application started 2025-07-01 10:01:15 ERROR Database connection failed 2025-07-01 10:02:30 INFO Retry database connection 2025-07-01 10:03:12 ERROR Timeout occurred EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

zgrep "ERROR" input.txt.gz

実行結果

2025-07-01 10:01:15 ERROR Database connection failed
2025-07-01 10:03:12 ERROR Timeout occurred

実行コマンド

zgrep -n "ERROR" input.txt.gz

実行結果

2:2025-07-01 10:01:15 ERROR Database connection failed
4:2025-07-01 10:03:12 ERROR Timeout occurred

実行コマンド

zgrep -i "error" input.txt.gz

実行結果

2025-07-01 10:01:15 ERROR Database connection failed
2025-07-01 10:03:12 ERROR Timeout occurred

仕組み

項目 内容
zgrep gzip形式(.gz)の圧縮ファイルを展開せずに検索するコマンド
"ERROR" 検索する文字列を指定
-n 一致した行番号を表示
-i 大文字・小文字を区別せず検索
input.txt.gz ログローテートされたgzip圧縮ログファイル

解説

zgrepを利用すると、ログローテートされた.gzファイルを解凍することなくgrepと同じ感覚で検索できます。
障害調査や過去ログの確認を効率よく行えるため、運用現場でよく利用されます。

grepで大量のgzファイルを高速に検索する方法

ファイル作成

mkdir -p logs

ファイル作成

cat << 'LOG' > logs/app1.log INFO Application started ERROR Database connection failed INFO Retry completed LOG

ファイル作成

cat << 'LOG' > logs/app2.log INFO User login ERROR Timeout occurred INFO Process finished LOG

ファイル作成

gzip -f logs/app1.log

ファイル作成

gzip -f logs/app2.log

実行コマンド

zgrep "ERROR" logs/app1.log.gz

実行結果

ERROR Database connection failed

実行コマンド

find logs -name "*.gz" -exec zgrep -H "ERROR" {} +

実行結果

logs/app1.log.gz:ERROR Database connection failed
logs/app2.log.gz:ERROR Timeout occurred

仕組み

仕組み 内容
zgrep gzip圧縮されたファイルを展開せずにgrep検索する。
find 大量の.gzファイルを検索対象として列挙する。
-H 一致したファイル名も同時に表示する。
-exec {} + 複数ファイルをまとめてzgrepへ渡し、プロセス生成回数を削減する。

解説

grep gz ファイルを検索する場合は、通常のgrepではなくzgrepを使用すると、gzipファイルを展開せずに直接検索できます。

大量のgzファイルではfindと-exec {} +を組み合わせることで、効率よく一括検索できます。

grepでgzファイル検索時によくあるエラーと対処法

ファイル作成

cat << 'EOF' > input.txt INFO Start application ERROR Database connection failed INFO Retry EOF

ファイル作成

gzip -c input.txt > input.txt.gz

実行コマンド

grep "ERROR" input.txt.gz

実行結果

no output

実行コマンド

zgrep "ERROR" input.txt.gz

実行結果

ERROR Database connection failed

実行コマンド

gzip -cd input.txt.gz | grep "ERROR"

実行結果

ERROR Database connection failed

仕組み

コマンド 仕組み
grep "ERROR" input.txt.gz gzip圧縮されたバイナリデータをそのまま検索するため、テキストとして正しく検索できません。
zgrep "ERROR" input.txt.gz 内部で.gzファイルを展開しながらgrepを実行するため、圧縮ファイルを直接検索できます。
gzip -cd input.txt.gz | grep "ERROR" gzip -cdで標準出力へ解凍した内容をパイプでgrepへ渡して検索します。

解説

grepは圧縮された.gzファイルの内容を直接検索できないため、Binary file ... matchesなどのメッセージが表示されることがあります。

.gzファイルを検索する場合はzgrep、またはgzip -cdで解凍してからgrepへ渡す方法を使用します。

grepでgzファイルを検索する方法のポイントまとめ

grepでgzファイルを扱うには、zgrepなどの関連コマンドを活用すると展開せずに検索できます。

効率よく目的のデータを見つけられるように各見出しのコマンドをご活用ください

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

©︎ 2025-2026 running terminal commands