Linuxで作業していて、こんな経験はありませんか?
- 「大量のログファイルの中からエラーメッセージを探したい」
- 「設定ファイルで特定の項目がどこに書かれているか知りたい」
- 「複数のファイルから同じ文字列を一度に検索したい」
そんな時に活躍するのが**grep
コマンド**です。
シンプルなのに強力で、エンジニアには欠かせない検索ツールのひとつです。
WindowsでいうCtrl+Fの超強化版のようなもので、複数ファイルを一度に検索できます。
この記事では、grep
コマンドの基本から実務で役立つ応用技までを、初心者にも分かりやすく解説します。
grepコマンドとは?

名前の由来と基本概念
grep
は「Global Regular Expression Print」の略で、指定したパターン(文字列や正規表現)に一致する行を表示するコマンドです。
簡単に言うと
「ファイルの中から、指定した文字列を含む行だけを表示してくれるツール」です。
基本的な使い方
grep "検索したい文字列" ファイル名
最初の例
# sample.txtファイルから「error」を含む行を検索
grep "error" sample.txt
sample.txtの内容:
2024-01-01 10:00:00 INFO アプリケーション開始
2024-01-01 10:05:15 ERROR データベース接続失敗
2024-01-01 10:06:00 INFO 再接続試行中
2024-01-01 10:06:30 ERROR 認証エラー
2024-01-01 10:07:00 INFO 正常に接続完了
実行結果:
2024-01-01 10:05:15 ERROR データベース接続失敗
2024-01-01 10:06:30 ERROR 認証エラー
grepの便利な点
特徴 | 説明 | 例 |
---|---|---|
高速検索 | 大量のファイルでも瞬時に検索 | ギガバイト級のログファイルでも数秒 |
複数ファイル対応 | 一度に複数ファイルを検索可能 | フォルダ内の全ファイルを一括検索 |
パターン検索 | 正規表現で複雑な条件も指定可能 | 「数字3桁を含む行」などの条件 |
組み合わせ可能 | 他のコマンドと組み合わせて使用 | パイプ(|)でデータを絞り込み |
基本オプション一覧と使い方
よく使われるオプション
オプション | 機能 | 使用例 | 結果 |
---|---|---|---|
-i | 大文字と小文字を区別しない | grep -i "error" log.txt | ERROR、error、Errorすべてにマッチ |
-v | 一致しない行を表示 | grep -v "debug" log.txt | debugを含まない行のみ表示 |
-r または -R | ディレクトリを再帰的に検索 | grep -r "main" ./src | srcフォルダ内の全ファイルを検索 |
-n | 行番号を表示 | grep -n "fail" result.txt | マッチした行の番号も表示 |
-c | マッチした行数を表示 | grep -c "success" log.txt | 成功回数をカウント |
さらに便利なオプション
オプション | 機能 | 使用例 | 活用場面 |
---|---|---|---|
--color=auto | 一致部分を色付きで表示 | grep --color=auto "warn" log.txt | 見つけやすくする |
-A 数字 | マッチした行の後ろN行も表示 | grep -A 3 "error" log.txt | エラーの詳細情報も確認 |
-B 数字 | マッチした行の前N行も表示 | grep -B 2 "crash" log.txt | クラッシュ直前の状況を確認 |
-C 数字 | マッチした行の前後N行を表示 | grep -C 5 "exception" log.txt | 例外の前後の文脈を確認 |
-l | ファイル名のみ表示 | grep -l "password" *.txt | パスワードを含むファイルを特定 |
実際の使用例
ケース1:大文字小文字を区別せずに検索
# ERRORもerrorもErrorも全て検索
grep -i "error" /var/log/syslog
ケース2:特定の文字列を含まない行を検索
# debugログを除外して表示
grep -v "debug" application.log
ケース3:行番号付きで検索
# 失敗した行を行番号付きで表示
grep -n "fail" test_results.txt
実行結果例:
15:2024-01-01 10:05:15 Test failed: connection timeout
23:2024-01-01 10:12:30 Authentication failed
ケース4:ディレクトリ全体を検索
# プロジェクト全体からTODOコメントを検索
grep -r "TODO" ./project/
正規表現によるパターン検索

正規表現とは?
正規表現は、文字列のパターンを表現するための記法です。「○○で始まる」「数字を含む」といった条件を指定できます。
基本的な正規表現パターン
パターン | 意味 | 例 | マッチする文字列 |
---|---|---|---|
. | 任意の1文字 | a.c | abc, axc, a1c |
* | 直前の文字が0回以上 | ab*c | ac, abc, abbc |
^ | 行の開始 | ^error | 行の最初がerrorで始まる |
$ | 行の終了 | error$ | 行の最後がerrorで終わる |
[0-9] | 数字1文字 | [0-9]+ | 123, 4, 999 |
[a-z] | 小文字のアルファベット1文字 | [a-z]+ | abc, hello |
実用的な正規表現の例
数字を含む行を検索
grep "[0-9]" data.txt
IPアドレスらしき文字列を検索
grep "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+" log.txt
特定の拡張子のファイルを検索
ls | grep "\.log$"
メールアドレスらしき文字列を検索
grep "[a-zA-Z0-9]\+@[a-zA-Z0-9]\+\.[a-zA-Z]\+" contacts.txt
HTTPステータスコードを検索
# 4xx, 5xxエラーを検索
grep " [45][0-9][0-9] " access.log
拡張正規表現(-E オプション)
より複雑なパターンには-E
オプションを使用:
# 複数のキーワードのいずれかにマッチ(OR検索)
grep -E "error|fail|warn" system.log
# 繰り返し回数を指定
grep -E "[0-9]{3}" data.txt # 3桁の数字
# グループ化
grep -E "(http|https)://[^[:space:]]+" webpage.html # URL検索
実務で役立つ活用例
ログ解析での活用
エラーログの抽出
# Apacheのエラーログからエラーを抽出
grep -i "error" /var/log/apache2/error.log
# 特定の時間帯のログを検索
grep "2024-01-01 1[0-2]:" application.log
アクセス数の集計
# 特定IPからのアクセス数をカウント
grep "192.168.1.100" access.log | wc -l
# 404エラーの発生件数
grep " 404 " access.log | wc -l
設定ファイルの管理
設定項目の確認
# パスワード関連の設定を検索
grep -r "password" /etc/
# コメント行を除いて設定を表示
grep -v "^#" /etc/ssh/sshd_config
プログラム開発での活用
コード内の検索
# 特定の関数を使用している箇所を検索
grep -r "getUserInfo" ./src/
# TODOコメントの検索
grep -rn "TODO\|FIXME" ./project/
# 特定のライブラリの使用箇所
grep -r "import pandas" ./python_scripts/
データ処理での活用
CSVファイルの処理
# 特定の条件に合うレコードを抽出
grep "Tokyo" customers.csv
# 複数条件での検索
grep "Tokyo.*[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" customers.csv
結果をファイルに保存
# 検索結果をファイルに保存
grep "error" system.log > errors.txt
# 複数ファイルの結果をまとめて保存
grep -h "warning" *.log > all_warnings.txt
他のコマンドとの組み合わせ
パイプ(|)を使った連携
プロセス一覧から特定のプロセスを検索
ps aux | grep "apache"
ディスク使用量の大きいディレクトリを検索
du -h | grep "G\s" | sort -hr
ネットワーク接続状況の確認
netstat -an | grep ":80"
findコマンドとの組み合わせ
特定の内容を含むファイルを検索
# 3日以内に変更されたファイルから「password」を検索
find . -mtime -3 -type f -exec grep -l "password" {} \;
# 特定の拡張子のファイルから検索
find . -name "*.py" | xargs grep "import os"
sortとの組み合わせ
検索結果をソート
# エラーメッセージを種類別にソート
grep "ERROR" application.log | sort | uniq -c | sort -nr
便利なgrepのバリエーション

grep系コマンドの種類
コマンド | 特徴 | 使用場面 |
---|---|---|
grep | 基本的な検索 | 通常の文字列検索 |
egrep | 拡張正規表現 | grep -E と同じ |
fgrep | 固定文字列検索 | grep -F と同じ、正規表現を使わない |
zgrep | 圧縮ファイル対応 | .gz ファイルを直接検索 |
実用的なエイリアス設定
.bashrc
に追加すると便利:
# よく使うgrepコマンドのエイリアス
alias grepi='grep -i' # 大文字小文字無視
alias grepr='grep -r' # 再帰検索
alias grepn='grep -n' # 行番号付き
alias grepv='grep -v' # 除外検索
alias grepcolor='grep --color=auto' # 色付き表示
パフォーマンスと注意点
高速化のコツ
大きなファイルでの検索を高速化
# ファイルサイズが大きい場合は、最初の数行で止める
grep -m 10 "error" huge_log.txt
# バイナリファイルをスキップ
grep -I "text" *
よくある間違いと対策
間違い1:シングルクォートとダブルクォートの混同
# ❌ 変数が展開されない
grep '$HOME' file.txt
# ⭕ 変数を展開したい場合
grep "$HOME" file.txt
# ⭕ 固定文字列として$HOMEを検索したい場合
grep '\$HOME' file.txt
間違い2:正規表現の特殊文字をエスケープし忘れ
# ❌ ドット(.)は任意の文字にマッチしてしまう
grep "192.168.1.1" log.txt
# ⭕ ドットを文字として検索
grep "192\.168\.1\.1" log.txt
間違い3:大きすぎる結果を標準出力に流してしまう
# ❌ 大量の結果が画面に流れる
grep "the" /usr/share/dict/words
# ⭕ ページャーを使用
grep "the" /usr/share/dict/words | less
# ⭕ 件数のみ確認
grep -c "the" /usr/share/dict/words
実践的なワンライナー集

ログ解析
# 1分間のエラー件数を時系列で表示
grep "ERROR" app.log | cut -d' ' -f1-2 | uniq -c
# 最も多いエラーメッセージTOP5
grep "ERROR" app.log | awk '{print $4}' | sort | uniq -c | sort -nr | head -5
# 特定IPからの連続アクセスを検知
grep "192.168.1.100" access.log | awk '{print $4}' | sort | uniq -c | awk '$1>10'
システム管理
# 実行中のプロセスから特定のサービスを検索
ps aux | grep -v grep | grep "nginx"
# メモリ使用量の多いプロセスを検索
ps aux | grep -v grep | sort -k4 -nr | head -10
# 設定ファイルから有効な設定のみ抽出
grep -v "^#\|^$" /etc/nginx/nginx.conf
開発作業
# 関数の定義箇所を検索
grep -rn "function.*getUserData" ./src/
# 未使用の変数を検索
grep -r "var.*=" ./js/ | grep -v "use\|call\|invoke"
# SQLインジェクションの可能性がある箇所を検索
grep -r "SELECT.*\$\|INSERT.*\$" ./php/
まとめ:grepでLinuxライフが変わる!
重要なポイント
grep
は文字列検索の万能ツール:ファイル内容から特定のパターンを瞬時に発見- 豊富なオプション:大文字小文字無視、行番号表示、再帰検索など用途に応じて選択
- 正規表現対応:複雑な検索条件も柔軟に指定可能
- 他コマンドとの連携:パイプやfindコマンドと組み合わせて強力な検索が可能
習得の順番
- 基本的な文字列検索:
grep "文字列" ファイル名
- よく使うオプション:
-i
,-v
,-r
,-n
- 正規表現の基本:
.
,*
,^
,$
- 他コマンドとの組み合わせ:パイプ、find、xargs
- 実務での応用:ログ解析、設定管理、コード検索
覚えておきたい基本コマンド
用途 | コマンド例 | 頻度 |
---|---|---|
基本検索 | grep "error" log.txt | ★★★★★ |
大文字小文字無視 | grep -i "error" log.txt | ★★★★★ |
再帰検索 | grep -r "password" /etc/ | ★★★★☆ |
行番号付き | grep -n "fail" result.txt | ★★★★☆ |
除外検索 | grep -v "debug" log.txt | ★★★☆☆ |
実践のコツ
- 少しずつ覚える:まずは基本的な検索から始める
- エイリアス活用:よく使うオプションの組み合わせをエイリアス化
- 他ツールとの連携:awk、sed、sortなどと組み合わせて活用
- 正規表現の練習:徐々に複雑なパターンにチャレンジ
コメント