テキストを検索したい(grep)

$ grep 検索パターン 検索するファイル

ファイルの内容から文字列を検索するコマンドです。 標準出力をパイプして、特定の文字列を抜きだしたい場合にもよく使います。

デフォルトの検索パターンは基本正規表現(BRE)として扱われます。

大文字/小文字を区別せずに探したい(-i)

$ grep -i 検索パターン 検索するファイル

-iオプションで、大文字/小文字を区別せずに検索できます。

マッチしなかった行を探したい(-v)

$ grep -v 検索パターン 検索するファイル

-vオプションで、検索パターンにマッチしなかった行だけを書きだせます。

行番号を表示したい(-n)

$ grep -n 検索パターン 検索するファイル

-nオプションで、マッチした行の頭に行番号をつけて表示できます。

マッチした数だけ知りたい(-c)

$ grep -c 検索パターン 検索するファイル

-cオプションで、マッチした行の内容ではなく、行数だけを書きだせます。

マッチしたファイル名だけ知りたい(-l)

// マッチした行を含むファイル名を書きだしたい
$ grep -l 検索パターン 検索するファイル

// マッチした行を含まないファイル名を書きだしたい
$ grep -L 検索パターン 検索するファイル

-lオプションで、マッチした内容ではなく、ファイル名だけを書きだせます。 -Lオプションを使うと、逆にマッチしなかったファイル名を書きだせます。

マッチした箇所を色付けしたい(--color)

$ grep --color 検索パターン 検索するファイル

--colorオプションで、マッチした文字列を色付きで表示できます。

ディレクトリを再帰的に探したい(-r / -R)

$ grep -r 検索パターン 検索するディレクトリ

-rオプションで、ディレクトリ以下を再帰的に検索できます。 BSD/macOS版のgrepでは-rと-Rは同じ意味です。

拡張正規表現を使いたい(-E)

// AまたはBを含む行を探したい
$ grep -E "A|B" 検索するファイル

-Eオプションで、拡張正規表現(ERE)を使って検索できます。 デフォルトの基本正規表現(BRE)では|や+などの記号を \|や\+のようにエスケープする必要がありますが、 -Eを使うとエスケープなしで使えます。

前後の行も一緒に見たい(-A / -B / -C)

// マッチした行の後を3行表示したい
$ grep -A 3 検索パターン 検索するファイル

// マッチした行の前を3行表示したい
$ grep -B 3 検索パターン 検索するファイル

// マッチした行の前後を3行ずつ表示したい
$ grep -C 3 検索パターン 検索するファイル

-A(after)・-B(before)・-C(context)オプションで、 マッチした行だけでなく前後の行もあわせて確認できます。 ログの前後の文脈を確認したいときに便利です。

圧縮ファイルを検索したい(zgrep)

$ zgrep 検索パターン 検索するファイル.gz

zgrepはgzipで圧縮されたファイルを展開せずに検索できるコマンドです。 grepと同じオプションがそのまま使えます。 ローテーションされて.gz化されたログをまとめて検索したいときに便利です。

アクセスログを確認したい

// 404エラーだけを確認したい
$ zgrep '" 404 ' access.log-20260819.gz

// 404エラー以外を確認したい
$ zgrep -v '" 404 ' access.log-20260819.gz

// 過去のアーカイブをまとめて確認したい
$ zgrep '" 404 ' access.log-*.gz

// 特定のIPアドレスからのアクセスを確認したい
$ zgrep '^127.0.0.1 ' access.log-20260819.gz

// 特定のパスへのGETリクエストを確認したい
$ zgrep '"GET /index.html ' access.log-20260819.gz

ウェブサーバーのアクセスログを確認するサンプルです。 アクセスログはローテーションされて.gzで保存されていることが多いので、 zgrepを使うと展開せずにそのまま検索できます。

上記のサンプルはApacheのアクセスログ(Combined Log Format)を例にしています。

127.0.0.1 - - [20/Aug/2026:12:00:00 +0900] "GET /index.html HTTP/1.1" 404 1234 "-" "Mozilla/5.0"

ステータスコードは"リクエスト行"の直後にあるため、 前後にダブルクォートとスペースを含めて検索すると、 レスポンスサイズやUser-Agentに含まれる数字との誤マッチを防げます。 -vを使うと、逆に特定のステータスコードを除外して確認できます。

IPアドレスで絞り込みたい場合は、行頭を示す^と組み合わせると、 X-Forwarded-Forヘッダーなど別の欄に含まれる同じIPアドレスとの誤マッチを防げます。 リクエストパスで絞り込みたい場合も、HTTPメソッドに続けて 末尾にスペースを1つ含めて検索すると、 似たパス(例:/index.html2)との誤マッチを防げます。