# grep クイックリファレンス

*パターン検索、正規表現、再帰検索、コンテキスト、フィルタリング*

> Source: grep man page and GNU grep documentation · MIT

## 基本的な使い方

### 基本構文

```
grep pattern file
grep pattern file1 file2
grep "multi word" file
grep -e pattern1 -e pattern2 file
```

### よく使うフラグ

| Command | Description |
|---------|-------------|
| `-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 .
```

### 再帰オプション

| Command | Description |
|---------|-------------|
| `-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 正規表現
```

### 正規表現フラグ

| Command | Description |
|---------|-------------|
| `-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
```

### コンテキストオプション

| Command | Description |
|---------|-------------|
| `-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件で停止
```

### 出力フラグ

| Command | Description |
|---------|-------------|
| `-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"
```
