grepでよく使うオプションの覚書(逆引き)

投稿者: | ↻ : 2019年10月15日

はじめに

ど忘れ防止に、grepを使用してパターンを検索する際によく使うオプションを逆引きでメモしておく。

パターン検索方法の色々

パターンが一致しない行を出力する場合、”-v”オプションを指定する。

grep -v pattern input.txt

大文字小文字を区別しない場合、”-i”オプションを指定する。

grep -i pattern input.txt

複数のパターンで検索する場合、”-e”オプションを指定する。

パターン毎にオプションを付けて指定する。パターンが一つならば”-e”オプションは省略できる。

grep -e pattern1 -e pattern2 input.txt

ただし、-8など”-“から始まるパターンで探したい場合は、”-e”オプションが必要となる。

grep -e -8 input.txt

パターンで正規表現を使いたい場合、”-E”オプションを指定する。

grep -E "0x[0-9A-Fa-f]{2}¥b" input.txt

パターンが見つかった行数も出力する場合、”-n”オプションを指定する。

grep -n pattern input.txt

パターンが見つかった行の前後n行を出力する場合、”-行数”オプションを指定する。

grep -3 pattern input.txt  # 前後3行を出力する

ファイルパスだけ出力する場合、”-l”オプションを指定する。

grep -l pattern input.txt

サブディレクトリのファイルも対象とした場合の色々

サブディレクトリも対象とする場合、”-r”オプションを指定する。

grep -r pattern .

除外したいディレクトリがある場合は、”–exclude-dir”オプションにパターンを指定する。

grep -r pattern --exclude-dir=.git .

除外したいディレクトリが複数ある場合は、”–exclude-dir”オプションに波括弧で括ったカンマ区切りのパターンを指定する。

grep -r pattern --exclude-dir={.git,.vagrant} .

対象ファイルをパターンで絞り込む。

grep -r pattern --include=*.rb .

対象ファイルを複数のパターンで絞り込む。

grep -r pattern --include={*.rb,*.yml} .

除外ファイルをパターンで指定する。

grep -r pattern --exclude=*.bak

除外ファイルを複数のパターンで指定する。

grep -r pattern --exclude={*.bak,*.html} .

注意

パターンが一つしかない場合に波括弧で括ると処理されないので注意する。

grep -r pattern --exclude={*.bak} .  # エラーにならないけど除外とならない。
grep -r pattern --exclude=*.bak .    # {}を取った状態にする