「grep」コマンドはLinux・Unixシステムにおけるテキスト検索の最も基本的なツールです。
grepの再帰的検索オプション(-rまたは-R)を使うことで、指定したディレクトリ以下のすべてのファイルを対象に特定のパターンを含む行を一括検索できます。
本記事では、grepコマンドの基本構文から再帰的検索の仕組み・主要オプション・正規表現との組み合わせ・実践的なコマンド例まで、わかりやすく解説します。
grepを使いこなすことで、ログ解析・コードレビュー・システム管理の作業効率が劇的に向上するでしょう。
grepコマンドとは何か?基本構文と仕組み
それではまず、grepコマンドの基本構文と仕組みについて解説していきます。
grepは「Global Regular Expression Print」の略であり、指定したパターン(文字列または正規表現)にマッチする行をファイルから検索して表示するコマンドです。
grepの基本構文:
grep [オプション] パターン [ファイル…]
例:grep “error” /var/log/syslog
→ syslogファイルの中から”error”を含む行をすべて表示する
grepは1行ずつテキストを読み込み、指定パターンにマッチする行のみを標準出力に表示します。
パターンには単純な文字列だけでなく、正規表現(Regular Expression)を使うことができ、これがgrepの最大の強みです。
再帰的検索オプション(-rと-R)
grepのデフォルト動作は単一ファイルまたは指定ファイル群を検索しますが、-rまたは-Rオプションを使うことで再帰的検索が可能になります。
再帰的検索の使用例:
# カレントディレクトリ以下のすべてのファイルから”ERROR”を検索
grep -r “ERROR” .
# /var/log以下のすべてのファイルから”timeout”を検索
grep -r “timeout” /var/log/
# -Rはシンボリックリンクも追跡する(-rは追跡しない)
grep -R “keyword” /etc/
-rと-Rの違いは、-Rがシンボリックリンクを辿ってリンク先のファイルも検索対象にするのに対し、-rはシンボリックリンクを辿らない点です。
主要なgrepオプション一覧
| オプション | 意味 | 使用例 |
|---|---|---|
| -r / -R | 再帰的検索 | grep -r “pattern” . |
| -i | 大文字小文字を区別しない | grep -i “error” file.txt |
| -n | 行番号を表示 | grep -n “word” file.txt |
| -l | マッチしたファイル名のみ表示 | grep -l “pattern” *.txt |
| -c | マッチした行数を表示 | grep -c “error” log.txt |
| -v | マッチしない行を表示(反転) | grep -v “debug” log.txt |
| -E | 拡張正規表現を使用(egrep相当) | grep -E “err|warn” log.txt |
| –include | 検索対象ファイルパターンを指定 | grep -r “word” –include=”*.py” |
| –exclude | 除外するファイルパターンを指定 | grep -r “word” –exclude=”*.min.js” |
再帰的grepの実践的な使い方
続いては、再帰的grepの実践的な使い方と具体的なコマンド例を確認していきます。
特定の拡張子のファイルのみを対象にする
再帰的検索でよく使う重要なオプションが「–include」です。
–includeを使った絞り込み検索:
# Pythonファイルのみを対象にimportを検索
grep -r “import pandas” –include=”*.py” .
# 複数の拡張子を対象にする
grep -r “TODO” –include=”*.py” –include=”*.js” .
# JavaScriptのminifyファイルを除外して検索
grep -r “function” –include=”*.js” –exclude=”*.min.js” .
行番号・ファイル名の表示と活用
開発現場での実務では-nと-lのオプションが特によく使われます。
実務でよく使う組み合わせ:
# マッチした行と行番号を表示(コードの場所を特定)
grep -rn “def main” –include=”*.py” .
# マッチしたファイル名のみ一覧表示(数が多い場合に有用)
grep -rl “API_KEY” –include=”*.py” .
# マッチした行数をファイルごとに表示
grep -rc “error” /var/log/ 2>/dev/null | grep -v “:0”
正規表現と組み合わせた高度な検索
grepの真の力は正規表現との組み合わせにあります。
正規表現を使った検索例:
# IPアドレスのパターンを検索(基本的な例)
grep -E “[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}” access.log
# ERRORまたはWARNで始まる行を検索
grep -E “^(ERROR|WARN)” /var/log/app.log
# 空行以外の行を表示
grep -v “^$” file.txt
-E(拡張正規表現)を使うことで|(OR)・?(0または1回)・+(1回以上)などの豊富な正規表現メタ文字が使えるようになります。
grepの便利な組み合わせと応用技
続いては、grepの便利な組み合わせと応用的な使い方を確認していきます。
パイプラインでの活用
grepはパイプ(|)を使って他のコマンドと組み合わせることで真の力を発揮します。
パイプラインでの活用例:
# プロセス一覧からnginxを探す
ps aux | grep nginx
# ログから”ERROR”を抽出して行数をカウント
grep “ERROR” /var/log/app.log | wc -l
# 特定の日付のエラーログを抽出してファイルに保存
grep “2025-01-01” /var/log/app.log | grep “ERROR” > error_20250101.log
grep・find・sedの三段活用
find・grep・sed(ストリームエディタ)を組み合わせることで、大量ファイルの一括テキスト置換といった高度なファイル操作が可能です。
find + grep + sedの組み合わせ:
# .pyファイルの中で”old_function”を含むファイルを見つけて”new_function”に置換
find . -name “*.py” | xargs grep -l “old_function” | xargs sed -i ‘s/old_function/new_function/g’
grepの色付き表示
grep –color=autoオプション(多くの環境でデフォルト設定済み)を使うと、マッチした箇所が色付きでハイライト表示されます。
.bashrcや.zshrcに「alias grep=’grep –color=auto’」を追記することで、常に色付き表示を有効にできます。
まとめ
grepコマンドの再帰的検索は-rまたは-Rオプションを使って指定ディレクトリ以下のすべてのファイルを対象にパターンマッチング検索を行います。
-iで大文字小文字無視・-nで行番号表示・-lでファイル名のみ表示・–includeで対象ファイルを絞り込むといったオプションを組み合わせることで、検索の精度と効率が大幅に向上します。
正規表現・パイプライン・find・xargsとの組み合わせによって、ログ解析・コードの一括検索・テキスト一括置換など多様な実務タスクに対応できます。
grepを自在に使いこなすことはLinuxシステム管理・開発作業の基礎中の基礎であり、日々の実務で積み重ねることで確実に習熟できるでしょう。