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

grepでバイナリファイルを扱う方法を徹底解説

updated: 2026/06/27 created: 2026/06/27

はじめに

grepはテキスト検索で広く使われるコマンドですが、バイナリファイルを対象にすると想定どおりに検索できないことがあります。

本記事では、ポイントを初学者にも分かりやすく整理して解説します。

参考元: GNU grep

grepでバイナリファイルを検索する方法

ファイル作成

cat << 'EOF' > input.txt Hello World Linux Text Data BINARY_DATA_START EOF

ファイル作成

echo -e ' \x00\x01\x02\x03\x04\xFF' >> input.txt

ファイル作成

cat << 'EOF' >> input.txt BINARY_DATA_END grep sample text EOF

実行コマンド

grep "grep" input.txt

実行結果

Binary file input.txt matches

実行コマンド

grep -a "BINARY_DATA" input.txt

実行結果

BINARY_DATA_START
BINARY_DATA_END

実行コマンド

grep --binary-files=text "BINARY_DATA" input.txt

実行結果

BINARY_DATA_START
BINARY_DATA_END

仕組み

オプション 仕組み 用途
grep -a バイナリファイルをテキストとして扱って検索する バイナリファイル内の文字列検索
grep --binary-files=text バイナリ判定を無効化しテキストとして処理する -a と同等の動作
通常の grep NULバイト(0x00)などを検出するとバイナリファイルと判断する テキストファイル検索

解説

上記では echo -e '\x00\x01\x02\x03\x04\xFF' により実際のバイナリデータをファイルへ追記しています。
grep -a や --binary-files=text を利用することで、バイナリを含むファイルでも文字列検索が可能です。

grepでバイナリファイル検索時に「Binary file matches」が表示される理由

ファイル作成

echo -e 'text\n\0binary\n' > binary.dat

実行コマンド

grep "binary" binary.dat

実行結果

Binary file binary.dat matches

実行コマンド

grep -a "binary" binary.dat

実行結果

binary

仕組み

項目 内容
「Binary file matches」が表示される理由 grepがNUL文字(\0)などを検出し、ファイルをバイナリファイルと判定するため
grepの動作 バイナリと判定すると内容表示を省略し、「Binary file xxx matches」を出力する
目的 端末への制御文字出力や文字化けを防ぐため
-a オプション バイナリファイルをテキストとして扱い、マッチした行を表示する
--binary-files=text -a と同等の動作を行う

解説

grepはファイル内にNUL文字などが含まれるとバイナリファイルと判断します。
そのため通常は一致した行を表示せず、「Binary file matches」というメッセージのみを出力します。

grepでバイナリファイル検索結果のファイル名だけを表示する方法

ファイル作成

cat << 'EOF' > input.txt sample text ERROR message binary data EOF

ファイル作成

echo -e '\x00\x01\x02ERROR\x03\x04' > binary.dat

実行コマンド

grep -rlI "ERROR" .

実行結果

./input.txt

実行コマンド

grep -rl "ERROR" .

実行結果

./input.txt
./binary.dat

仕組み

オプション 役割 バイナリファイルの扱い
-l 一致したファイル名のみ表示 バイナリでもファイル名を表示
-r ディレクトリを再帰検索 配下の全ファイルを検索
-I バイナリファイルを無視 バイナリファイルを検索対象外にする

解説

grep -l を使用すると、一致した行ではなくファイル名だけを表示できます。

バイナリファイルも対象にしたい場合は -l を使用し、除外したい場合は -I を組み合わせます。

grepでバイナリファイル検索対象の拡張子を限定する方法

ファイル作成

cat << 'EOF' > input.txt error: database connection failed EOF

ファイル作成

echo -e '\x00\x01\x02error\x03\x04' > sample.bin

ファイル作成

echo -e 'error: application failed\n' > sample.log

ファイル作成

echo -e 'error: network failed\n' > sample.txt

実行コマンド

grep --include="*.log" --include="*.txt" -rn "error" .

実行結果

./sample.log:1:error: application failed
./sample.txt:1:error: network failed

実行コマンド

grep -rn "error" .

実行結果

./sample.log:1:error: application failed
./input.txt:1:error: database connection failed
./sample.txt:1:error: network failed
Binary file ./sample.bin matches

仕組み

項目 内容
grep -r ディレクトリ配下を再帰的に検索
--include="*.log" .log ファイルのみ検索対象にする
--include="*.txt" .txt ファイルのみ検索対象にする
バイナリファイル除外 指定拡張子以外を検索しないため .bin を対象外にできる
効果 Binary file matches のような不要な結果を回避できる

解説

grep は再帰検索時にバイナリファイルも対象にするため、意図しない一致が発生します。
--include で検索対象の拡張子を限定すると、テキストファイルだけを効率よく検索できます。

grepの--binary-filesオプションの使い方

ファイル作成

echo -e 'Hello World\nBinaryData\n\0\nAnother Line\n' > binary.txt

実行コマンド

grep "BinaryData" binary.txt

実行結果

Binary file binary.txt matches

実行コマンド

grep --binary-files=text "BinaryData" binary.txt

実行結果

BinaryData

実行コマンド

grep --binary-files=without-match "BinaryData" binary.txt

実行結果

no output

仕組み

項目 内容
--binary-files=text バイナリファイルをテキストとして扱い、通常どおり検索結果を表示する。
--binary-files=without-match バイナリファイルを検索対象外として扱い、一致した場合も出力しない。
デフォルト動作 バイナリファイルを検出すると binary file matches と表示し、内容は出力しない。

解説

grep はNULL文字などを含むファイルをバイナリとして判定します。
--binary-files オプションを使用すると、バイナリファイルをテキストとして検索するか、検索対象外にするかを制御できます。

grepの-aオプションとバイナリファイル検索の違い

ファイル作成

cat << 'EOF' > input.txt Hello World Linux grep sample ABC grep binary test EOF

ファイル作成

echo -e "\0\n" >> input.txt

実行コマンド

grep "grep" input.txt

実行結果

Binary file input.txt matches

実行コマンド

grep -a "grep" input.txt

実行結果

grep sample
grep binary test

仕組み

項目 grep grep -a
バイナリファイル検出 NUL文字を検出するとバイナリファイルとして扱う テキストファイルとして強制的に扱う
検索結果 binary file matchesのみ表示 一致した行を表示
用途 バイナリデータを誤表示しないため バイナリに混在した文字列を調査したい場合

解説

通常のgrepはNUL文字を含むファイルをバイナリファイルと判断し、一致のみを通知します。
-aオプションを付けるとテキストとして扱うため、バイナリファイル内に含まれる文字列も表示できます。

grepでバイナリファイルをテキストとして扱う方法

ファイル作成

echo -e '\x00\x01\x02grep-test\x03\x04' > binary.dat

実行コマンド

grep 'grep-test' binary.dat

実行結果

Binary file binary.dat matches

実行コマンド

grep -a 'grep-test' binary.dat

実行結果

grep-test

実行コマンド

grep --binary-files=text 'grep-test' binary.dat

実行結果

grep-test

仕組み

項目 内容
通常のgrep バイナリファイルを検出すると内容を表示せず「Binary file ~ matches」と出力する
-a バイナリファイルをテキストとして扱う(--textと同義)
--binary-files=text バイナリ判定を無視してテキストとして検索する
利用場面 ログにバイナリデータが混在している場合や、文字列が埋め込まれた実行ファイルを調査する場合

解説

grep は NULL 文字などを検出するとバイナリファイルと判断します。

-a または --binary-files=text を指定すると、バイナリファイルでもテキストとして検索結果を表示できます。

grepでバイナリファイルを除外して検索する方法

ファイル作成

cat << 'EOF' > input.txt text data error message binary file EOF

ファイル作成

echo -e '\x00\x01\x02binary-data\x03\x04' > binary.dat

実行コマンド

grep --binary-files=without-match "binary" *

実行結果

input.txt:binary file

仕組み

項目 内容
grep ファイル内の文字列を検索するコマンド
--binary-files=without-match バイナリファイルを検索対象外として扱う
"binary" 検索するキーワード
* カレントディレクトリ内の全ファイルを対象にする
効果 バイナリファイルによるノイズを除外し、テキストファイルのみ検索できる

解説

grep は通常、バイナリファイルを検出すると「Binary file matches」と表示します。

--binary-files=without-match を指定するとバイナリファイルを無視して検索できるため、ソースコードやログ検索で便利です。

grepの-Iオプションとバイナリファイル除外の違い

ファイル作成

echo -e 'text data\nbinary\0data\nhello world\n' > input.txt

実行コマンド

grep "data" input.txt

実行結果

Binary file input.txt matches

実行コマンド

grep -I "data" input.txt

実行結果

no output

実行コマンド

grep --binary-files=without-match "data" input.txt

実行結果

no output

仕組み

項目 grep -I grep --binary-files=without-match
動作 バイナリファイルと判定した場合は一致しないものとして扱う バイナリファイルを一致しないものとして扱う
対象 -I は --binary-files=without-match の短縮オプション 同じ動作をオプション名で指定
可読性 短く書ける 意味が明確でスクリプト向き
用途 手入力のコマンド 設定やシェルスクリプトなど

解説

-I は --binary-files=without-match の省略形であり、動作に違いはありません。どちらもバイナリファイルを検索対象から実質的に除外し、Binary file matches の表示を防ぐために利用します。

grepで再帰検索時にバイナリファイルを制御する方法

ファイル作成

cat << 'EOF' > sample.txt Hello World ERROR EOF

ファイル作成

cat << 'EOF' > app.log ERROR Application ERROR EOF

ファイル作成

cat << 'EOF' > readme.md grep sample ERROR EOF

ファイル作成

mkdir -p bin images

ファイル作成

echo -e '\x7fELF\x02\x01\x01ERROR\0' > bin/app

ファイル作成

echo -e '\x89PNG\r\n\x1a\nERROR\0' > images/logo.png

実行コマンド

grep -r "ERROR" .

実行結果

Binary file ./bin/app matches
Binary file ./images/logo.png matches
./readme.md:ERROR
./app.log:ERROR
./app.log:Application ERROR
./sample.txt:ERROR

実行コマンド

grep -rI "ERROR" .

実行結果

./readme.md:ERROR
./app.log:ERROR
./app.log:Application ERROR
./sample.txt:ERROR

実行コマンド

grep -ra "ERROR" .

実行結果

./bin/app:ELFERROR
./images/logo.png:ERROR
./readme.md:ERROR
./app.log:ERROR
./app.log:Application ERROR
./sample.txt:ERROR

仕組み

オプション 仕組み 用途
-r ディレクトリを再帰的に検索し、バイナリファイルを検出すると内容は表示せず「Binary file ~ matches」と出力する 標準的な再帰検索
-rI バイナリファイルを検索対象から除外する ソースコードやテキストファイルのみ検索したい場合
-ra (--binary-files=text) バイナリファイルをテキストとして扱い、一致した内容も表示する バイナリファイル内の文字列も検索したい場合

解説

grep は通常、バイナリファイルを検出すると内容を表示せず「Binary file ~ matches」と出力します。
-I を指定するとバイナリファイルを無視し、-a を指定するとバイナリファイルをテキストとして扱って内容まで表示できます。

grepでバイナリファイル検索時の文字コード問題

実行コマンド

grep "he" /bin/ls

実行結果

Binary file /bin/ls matches

実行コマンド

grep -a "he" /bin/ls

実行結果

バイナリデータ中の一致箇所を含む行が表示される

実行コマンド

grep --binary-files=text "he" /bin/ls

実行結果

バイナリデータ中の一致箇所を含む行が表示される

仕組み

項目 内容
grepの通常動作 NULL文字などを検出するとバイナリファイルと判断する
Binary file matches 一致はしたが内容表示を抑止している状態
-a バイナリファイルをテキストとして扱う
--binary-files=text -a と同等の動作
-I バイナリファイルを無視して検索する
文字コード問題との関係 文字コード誤認やNULL文字混入によりテキストでもバイナリ扱いされることがある

解説

grepは内部でNULL文字などを検出するとテキストではなくバイナリファイルと判断します。
そのため検索結果が表示されず「バイナリファイルが一致しました」となり、-a や --binary-files=text を利用して強制的にテキストとして扱います。

grepでUTF-8以外のファイルがバイナリ判定されるケース

ファイル作成

cat << 'EOF' > input.txt grep processes files as text by default. When a file contains non-UTF-8 encoded data or NUL bytes (0x00), grep may determine that the file is a binary file. EOF

ファイル作成

echo -e "\0" >> input.txt

実行コマンド

grep "grep" input.txt

実行結果

Binary file input.txt matches

実行コマンド

grep -a "grep" input.txt

実行結果

grep processes files as text by default.
grep may determine that the file is a binary file.

仕組み

項目 内容
grepの判定 grepはNULバイトを検出するとバイナリファイルと判断することがある
UTF-8以外との関係 Shift_JISやEUC-JPなどでも内容によってはバイナリ判定される場合がある
表示メッセージ Binary file input.txt matches
-a オプション バイナリ判定を無視してテキストとして処理する

解説

grepは文字コードそのものではなく、主にNULバイトなどの内容からバイナリ判定を行います。

UTF-8以外のファイルでは文字列パターンによってバイナリと誤認されるケースがあるため、必要に応じて grep -a を利用します。

grepとstringsを組み合わせてバイナリファイルを検索する方法

ファイル作成

cat << 'EOF' > input.txt Hello World User: alice Password: secret123 API_KEY=ABC123XYZ ERROR: Connection failed TOKEN=xyz987 EOF

ファイル作成

echo -e '\x00\x01\x02' >> input.txt

実行コマンド

grep "ERROR" input.txt

実行結果

Binary file input.txt matches

実行コマンド

strings input.txt

実行結果

Hello World
User: alice
Password: secret123
API_KEY=ABC123XYZ
ERROR: Connection failed
TOKEN=xyz987

実行コマンド

strings input.txt | grep "ERROR"

実行結果

ERROR: Connection failed

実行コマンド

strings input.txt | grep -Ei "password|token"

実行結果

Password: secret123
TOKEN=xyz987

仕組み

項目 内容
strings バイナリファイル内から表示可能な文字列のみを抽出する
grep 抽出された文字列から指定したキーワードを検索する
パイプ (|) strings の出力を grep に渡して絞り込み検索を行う
利点 バイナリファイル全体を直接検索するより、埋め込まれた文字列を効率よく発見できる

解説

stringsで可読文字列を取り出してからgrepで検索することで、実行ファイルや圧縮ファイル内に含まれるエラーメッセージや認証情報などを素早く見つけられます。
バイナリファイルを調査する際の基本的な組み合わせとしてよく利用されます。

grepとhexdumpを使ったバイナリファイル解析

ファイル作成

cat << 'EOF' > sample.bin Hello Linux grep Binary DATA EOF

ファイル作成

printf '\0TEXT' >> sample.bin

実行コマンド

grep 'TEXT' sample.bin

実行結果

Binary file sample.bin matches

実行コマンド

grep -a 'TEXT' sample.bin

実行結果

TEXT

実行コマンド

hexdump -C sample.bin

実行結果

00000000  48 65 6c 6c 6f 0a 4c 69  6e 75 78 0a 67 72 65 70  |Hello.Linux.grep|
00000010  0a 42 69 6e 61 72 79 0a  44 41 54 41 0a 00 54 45  |.Binary.DATA..TE|
00000020  58 54                                             |XT|
00000022

仕組み

コマンド 仕組み
grep 'TEXT' sample.bin NUL (0x00) を含むためバイナリファイルと判定し、Binary file sample.bin matches を出力する。
grep -a 'TEXT' sample.bin -a オプションによりテキストとして扱い、一致した行を表示する。
hexdump -C sample.bin ファイルを16進数とASCII形式で表示し、バイナリデータの内容を確認できる。

解説

grep は NUL 文字を含むファイルをバイナリファイルと判定します。

hexdump -C を併用すると、文字列だけでなく実際のバイト列も確認できるため、バイナリファイルの解析に役立ちます。

grepでバイナリファイル検索が失敗する場合の対処法

ファイル作成

cat << 'EOF' > input.txt Text data ERROR: application failed Process completed successfully EOF

ファイル作成

echo -e '\x89PNG\r\n\x1a\nERROR: binary data\n\0' > binary.dat

実行コマンド

grep "ERROR" *

実行結果

Binary file binary.dat matches
input.txt:ERROR: application failed

実行コマンド

grep -a "ERROR" *

実行結果

binary.dat:ERROR: binary data
input.txt:ERROR: application failed

実行コマンド

grep --binary-files=text "ERROR" *

実行結果

binary.dat:ERROR: binary data
input.txt:ERROR: application failed

仕組み

オプション 仕組み 用途
grep "ERROR" * grepがバイナリと判定したファイルは内容を表示せず「binary file matches」と出力 通常検索
grep -a "ERROR" * バイナリファイルをテキストとして扱って検索 バイナリ内の文字列確認
grep --binary-files=text "ERROR" * バイナリ判定を無効化しテキスト扱いで検索 スクリプトや自動処理向け

解説

grepはNUL文字などを検出するとバイナリファイルと判断し、マッチした内容を表示しないことがあります。

-a または --binary-files=text を使用すると、バイナリファイル内の文字列も通常のテキストと同様に検索できます。

grepでバイナリファイルを理解して検索するポイント

grepは通常、バイナリファイルを検出すると出力を抑制し、Binary file matchesと表示します。

内容を確認したい場合は-aや--binary-files=textを利用し、除外したい場合は-Iや--binary-files=without-matchが便利です。

検索結果が期待どおりにならない場合は、オプションや文字コード、対象ファイルの種類を確認することが解決への近道です。

コメントを残す

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

©︎ 2025-2026 running terminal commands