Linux の grep コマンド:テキスト検索とパターン抽出の実践ガイド

grep は、Linux システム上でテキストを高速かつ柔軟に検索・フィルタリングするコアユーティリティです。標準入力または指定ファイルから正規表現や固定文字列に一致する行を抽出し、必要に応じて行番号、ファイル名、マッチ部分のみなどの詳細情報を出力できます。シェルスクリプトやログ解析、設定ファイルの確認など、日常的な運用作業において不可欠なツールです。

主なオプション一覧(実用性重視で整理)

  • -i:大文字・小文字を区別しない検索(例:grep -i "error" /var/log/syslog
  • -n:一致した行の行番号を表示(例:grep -n "timeout" config.conf
  • -c:一致行数をカウント(例:grep -c "Failed" auth.log
  • -v:反転検索(不一致の行のみ出力)
  • -o:完全な行ではなく、マッチした部分文字列のみを抽出
  • -E:拡張正規表現(ERE)を有効化(egrep と同等)
  • -r または -R:ディレクトリを再帰的に探索
  • --include=*.py:特定拡張子のファイルのみ対象にする
  • --exclude-dir=node_modules:不要なディレクトリをスキップ
  • -f pattern.txt:外部ファイルから複数の検索パターンを読み込む
  • --color=always:マッチ部分を色付きでハイライト(端末表示時)

正規表現の基本構文(grep -E で使用)

記号意味
^行頭にマッチgrep -E '^ERROR' log.txt
$行末にマッチgrep -E '404$' access.log
\b単語境界(単語の始まり/終わり)grep -E '\broot\b' /etc/passwd
[0-9]{3,5}3〜5桁の数字連続grep -E '[0-9]{3,5}' data.csv
(yes|no)「yes」または「no」のいずれかgrep -E '(enabled|disabled)' service.conf

実践的な使い方

1. ファイル内のIPアドレス抽出

echo "Connected from 192.168.1.100:5432" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'

192.168.1.100

2. 複数条件でログを絞り込み(AND 模倣)

grep "POST" /var/log/apache2/access.log | grep "404"

grep -E "POST.*404|404.*POST" でも可

3. パターンリストによる除外処理

exclude_patterns.txt に以下を記述:

debug
INFO
TRACE

実行:

grep -v -f exclude_patterns.txt app.log

4. ソースコード内で関数定義を検出

grep -r -n -E '^\s*function\s+[a-zA-Z_][a-zA-Z0-9_]*\s*\(.*\)\s*\{' ./src/

5. 行頭が英字、その後にコロン+空白が続く行を抽出

grep -E '^[a-zA-Z]:[[:space:]]' notes.md

6. 6桁以上の数字を含む行を表示し、行番号付きで出力

grep -n -E '[0-9]{6,}' records.txt

7. 特定ディレクトリ配下の .conf と .yaml だけを対象に再帰検索

grep -r --include="*.conf" --include="*.yaml" "timeout" /etc/

8. 大文字小文字を無視して「warning」を含む行を赤く強調表示

grep -i --color=always "warning" application.log

タグ: grep linux regex bash shell-scripting

6月10日 16:25 投稿