1. はじめに
grep
は、対象ファイルの中で、指定した文字列パターンにマッチした行を表示するコマンドです。
※ 本ページで扱うのは GNU grep v2.25 です。
2. 主な使い方
個人的に、よく使うのは以下の使い方です。
$ grep -inR 文字列パターン 対象ファイルパス
- 「対象ファイルパス」はディレクトリでもOKです(
-R
オプションを指定しているため)。
指定した3つのオプションを表にしました。
オプション | 説明 |
---|---|
-i, --ignore-case | 大文字・小文字を区別しない。 |
-n, --line-number | 行頭に行番号を出力する。 |
-R, -r, --recursive | ディレクトリ内のファイルも再帰的に検索する。 |
例1
以下が記述された hello.c
ファイルがカレントディレクトリに置いてあるとします。
#include <stdio.h>
int main()
{
printf("Hello, Foo!");
printf("Hello, Bar!");
printf("Hello, Baz!");
return 0;
}
hello.c
ファイル内の “Hello” という文字列を検出する場合は、以下のようにコマンドを実行します。
$ grep Hello hello.c
printf("Hello, Foo!");
printf("Hello, Bar!");
printf("Hello, Baz!");
例2
同じ hello.c
ファイルが、test
ディレクトリ内に置いてあるとします。
test
└─ hello.c
この場合は、先程紹介した -R
オプションを使って再帰的にディレクトリ内のファイルまで処理の対象とすることができます。
$ grep -R Hello test
test/hello.c: printf("Hello, Foo!");
test/hello.c: printf("Hello, Bar!");
test/hello.c: printf("Hello, Baz!");
では、3つのオプションを全て指定して実行します。文字列パターンは、”hello” と小文字にしておきます。
$ grep -inR hello test
test/hello.c:4: printf("Hello, Foo!");
test/hello.c:5: printf("Hello, Bar!");
test/hello.c:6: printf("Hello, Baz!");
-i
オプションにより、”Hello” がマッチされました。また、-n
オプションにより、マッチした行番号が表示されました。
3. その他のオプション
それ以外で、時々使うオプションです。
オプション | 説明 |
---|---|
-E, --extended-regexp |
|
-v, --invert-match |
|
-a, --text |
|
4. 正規表現について
grep では以下の3つの正規表現を使うことができます。
- 基本正規表現 (BRE)
- 拡張正規表現 (ERE)
- Perlの正規表現 (PCRE)
正規表現の種類 | 説明 |
---|---|
基本正規表現 (BRE) |
|
拡張正規表現 (ERE) |
|
Perlの正規表現 (PCRE) |
|
簡単な表現しか使わないのであれば基本正規表現でよいですが、ちゃんと正規表現を指定したい場合は、-E
オプションを使って拡張正規表現を使いましょう。