GREP クイックリファレンス
パターン検索、正規表現、再帰検索、コンテキスト、フィルタリング
基本的な使い方
基本構文
grep pattern file
grep pattern file1 file2
grep "multi word" file
grep -e pattern1 -e pattern2 file
よく使うフラグ
| -i | 大文字小文字を区別しない |
| -v | 一致しない行を表示 |
| -n | 行番号を表示 |
| -c | 一致した行数を表示 |
| -l | 一致したファイル名のみ表示 |
| -L | 一致しなかったファイル名のみ表示 |
| -w | 単語全体に一致 |
| -x | 行全体に一致 |
再帰検索
ディレクトリの検索
grep -r pattern dir/ # 再帰的に検索
grep -R pattern dir/ # シンボリックリンクも追跡
grep -r --include="*.py" pattern dir/
grep -r --exclude="*.log" pattern dir/
grep -r --exclude-dir=".git" pattern .
再帰オプション
| -r | ディレクトリを再帰的に検索 |
| -R | シンボリックリンクも追跡して再帰検索 |
| --include=GLOB | 一致するファイルのみ検索 |
| --exclude=GLOB | 一致するファイルを除外 |
| --exclude-dir=DIR | 一致するディレクトリを除外 |
正規表現
基本正規表現 (BRE)
grep "^start" file # 行頭
grep "end$" file # 行末
grep "go.d" file # 任意の1文字
grep "colou*r" file # 0回以上の繰り返し
grep "[aeiou]" file # 文字クラス
拡張正規表現 (ERE)
grep -E "one|two" file # または
grep -E "go(ing)?" file # 省略可能なグループ
grep -E "[0-9]+" file # 1回以上の繰り返し
grep -P "\d{3}-\d{4}" file # Perl 正規表現
正規表現フラグ
| -E | 拡張正規表現(egrep 相当) |
| -F | 固定文字列(正規表現なし、fgrep 相当) |
| -P | Perl 互換正規表現 |
| -G | 基本正規表現(デフォルト) |
コンテキスト表示
前後の行を表示
grep -A 3 pattern file # 一致行の後3行
grep -B 3 pattern file # 一致行の前3行
grep -C 3 pattern file # 前後3行
grep --context=3 pattern file
コンテキストオプション
| -A NUM | 一致行の後 NUM 行を表示 |
| -B NUM | 一致行の前 NUM 行を表示 |
| -C NUM | 一致行の前後 NUM 行を表示 |
出力の制御
出力オプション
grep -o pattern file # 一致した部分のみ表示
grep -h pattern file # ファイル名を非表示
grep -H pattern file # ファイル名を表示(常に)
grep --color=auto pattern file
grep -m 5 pattern file # 最大5件で停止
出力フラグ
| -o | 一致した部分のみ表示(1行1件) |
| -h | ファイル名プレフィックスを非表示 |
| -H | 常にファイル名を表示 |
| --color | 一致箇所を色付きで強調 |
| -m NUM | NUM 件一致したら停止 |
| -q | 静止モード(終了コードのみ) |
よくあるパターン
実用例
grep -rn "TODO" --include="*.py" .
grep -i "error\|warning" app.log
grep -v "^#" config.txt # コメント行を除外
grep -c "" file # 行数をカウント
grep -E "^$" file # 空行を検索
パイプとの組み合わせ
ps aux | grep nginx
cat file | grep -v "^$"
history | grep git
find . -name "*.js" | xargs grep "TODO"