「あのエラー、ログのどこに出ていたっけ」とファイルを上から眺めているだけで、数分が溶けていきます。
そんなときに私が最初に叩くのが grep です。
grep は、ファイルの中から指定した文字を含む行だけを抜き出してくれるコマンド。
覚えるオプションはほんの数個で、それだけでログ調査もソースコード検索も一気に速くなります。
この記事では、明日からそのまま使える最小限の grep を、実際のコマンドと一緒にまとめました。
grep の基本形
一番シンプルな形は、探したい文字とファイル名を並べるだけです。
grep "error" app.log
これで app.log の中から「error」を含む行だけが表示されます。
複数のファイルをまとめて探したいときは、ワイルドカードの出番です。
grep "error" *.log
この場合は、どのファイルにヒットしたかがわかるよう、行の先頭にファイル名が付きます。
まず覚えたい4つのオプション
数あるオプションのうち、私が日常で使うのは実質4つだけです。
大文字小文字を無視する(-i)
Error でも ERROR でも拾いたいときは -i を付けます。
grep -i "error" app.log
行番号を表示する(-n)
-n を付けると、マッチした行が元ファイルの何行目かも一緒に出してくれます。
grep -n "error" app.log
エディタで該当行へ飛ぶときに便利なので、私はほぼ常に付けています。
含まない行を探す(-v)
発想を逆にして、「この文字を含まない行」だけを見たいこともあるでしょう。
そのときは -v でマッチを反転させます。
grep -v "DEBUG" app.log
DEBUG 行を消してノイズを減らす、といった使い方が定番ですね。
前後の行も一緒に見る(-A / -B / -C)
エラー行だけを見ても、原因は前後の行に隠れていることが多いものです。
-C を使えば、マッチ行の前後をまとめて表示できます。
grep -C 3 "error" app.log
後ろだけなら -A(after)、前だけなら -B(before)と覚えると迷いません。
ディレクトリをまるごと検索する(-r)
「この関数、どこで定義したんだっけ」とコードを探すときは、-r の再帰検索が効きます。
grep -rn "TODO" ./src
-r でフォルダの中を丸ごとたどり、-n で行番号も出す、という組み合わせがよく使う形です。
ヒットしたファイル名だけ知りたいなら、-l を付けると一覧がすっきりします。
grep -rl "TODO" ./src
パイプと組み合わせると本領を発揮する
grep が輝くのは、他のコマンドの出力を絞り込むときです。
縦棒(パイプ)の後ろに grep を置くと、直前の出力から必要な行だけを残せます。
ps aux | grep nginx
動いているプロセスの中から nginx 関連だけを取り出す、といった使い方です。
history | grep git
過去に打った git コマンドを思い出したいときにも重宝します。
JSON の整形が jq の仕事なら、行単位のフィルタは grep の仕事、と役割で覚えておくと使い分けが楽になるはずです。
正規表現でパターンを検索する
grep は固定の文字列だけでなく、パターンでも検索できます。
複数の候補をまとめて拾いたいときは、-E を付けて縦棒で並べるだけです。
grep -E "error|warning" app.log
行の位置も指定できて、^ は行頭、$ は行末を表します。
grep -E "^2026-07" app.log
これで「2026-07 で始まる行」、つまり7月のログだけを抜き出せます。
逆に、記号をそのままの文字として探したいときは、-F を付けると安全で速いです。
つまずきやすいポイント
検索する文字は、できるだけクォートで囲むのがおすすめ。
スペースや記号が混じっていると、囲まないままではシェルに誤解釈されがちです。
マッチが多すぎて画面が流れてしまうときは、パイプで less に渡すと落ち着いて読めます。
grep -rn "error" ./logs | less
最後に
grep は -i / -n / -v / -r の4つと、パイプ・-E さえ押さえれば、日常の検索はほとんど片付きます。
まず grep でざっくり当たりをつけて、細かい抽出は別のツールに渡す——この流れが手に馴染むと、調査のスピードが変わってくるのです。
細かい挙動を確かめたいときは、GNU grep のマニュアルが一次情報として頼りになります。
以上です。









コメントを残す