Skip to content
On this page

Grepコマンドでコンテンツを検索する

🎫 コンテンツは 2023-08-23 に以下のプラットフォームで検証されました
✅ Ubuntu 22.10
✅ macOS 13.2.1

ファイル内のコンテンツを検索することは、Linuxユーザーにとって一般的なタスクです。たとえば、特定の単語やフレーズが含まれるすべてのファイルを見つけたい場合があります。大規模なコードベースで特定の設定やメソッド呼び出しを探しているときに非常に便利です。

grepは、Linuxシステムで使用されるコマンドラインユーティリティツールで、ファイルの内容に特定のパターンを検索するために使用されます。テキスト文字列、正規表現、または1つ以上のファイルでのパターンの検索をユーザーに可能にする強力なツールです。grepは、データのフィルタリングや操作に他のコマンドと組み合わせてよく使用されます。WindowsやmacOSなどの他のプラットフォームでも利用できます。

このチュートリアルでは、最も一般的なオプションの詳細な説明と実践的な例を通じて、grepコマンドの使用方法を説明します。

Grepコマンドの使い方

grepコマンドの基本的な構文は次のとおりです:

bash
grep [オプション] パターン [ファイル...]

grepコマンドは、1つ以上のファイルでパターンを検索します。パターンが見つかった場合、一致する行を表示します。ファイルが指定されていない場合、grepは標準入力から読み取ります。

次のようなfile.txtという名前のファイルがあるとします:

This is a test file.
It has some text in it.
Another line of text.

file.txtファイルで単語textを検索するには、次のコマンドを実行します:

bash
> grep text file.txt

It has some text in it.

出力には、単語textを含む行が表示されます。

一致のコンテキストを表示したい場合は、-Cオプションを使用し、一致の前後に表示する行数を指定します:

bash
> grep -C 1 テスト file.txt

This is a test file.
It has some text in it.
Another line of text.

出力には、単語textを含む行とその前後の1行が表示されます。

複数の結果がある場合、出力は--で区切られます。例えば:

bash
> grep -C 1 xxx file.txt

This is a test file.
It has some text in it.
Another line of text.
--
This is a test file.
It has some text in it.
Another line of text.

Grepコマンドのオプション

grepコマンドには、出力をカスタマイズしたり特定のパターンを検索したりするための多くのオプションがあります。このセクションでは、最も一般的なオプションを紹介します。

大文字と小文字を区別しない

デフォルトでは、grepは大文字と小文字を区別します。つまり、単語textを検索しても、TextTEXTにはマッチしません。

grepを大文字と小文字を区別しないようにするには、-iオプションを使用します:

bash
> grep -i TEXT file.txt

It has some text in it.

マッチを反転する

マッチを反転するには、-vオプションを使用します。パターンにマッチしないすべての行を表示します:

bash
> grep -v text file.txt

This is a test file.
Another line of text.

行番号を表示する

マッチした行の行番号を表示するには、-nオプションを使用します:

bash
> grep -n text file.txt

2:It has some text in it.

マッチした部分のみを表示する

行のマッチした部分のみを表示するには、-oオプションを使用します:

bash
> grep -o text file.txt

text

ファイル名のみを表示する

パターンにマッチするファイル名のみを表示するには、-lオプションを使用します:

bash
> grep -l text file.txt

file.txt

マッチした行数のみを表示する

マッチした行の数のみを表示するには、-cオプションを使用します:

bash
> grep -c text file.txt

1

再帰的に検索する

単一のファイルだけでなく、ディレクトリとそのサブディレクトリを再帰的に検索するには、-r オプションを使用します:

bash
> grep -r text .

file.txt:It has some text in it.

複数のパターンを検索する

複数のパターンを検索するには、-e オプションを使用してパターンを指定します:

bash
> grep -e text -e line file.txt

It has some text in it.
Another line of text.

注意:パターンは論理 OR 演算子を使用してマッチングされます。つまり、いずれかのパターンがマッチする場合、その行が表示されます。

ファイルを除外する

特定のパターンにマッチするファイルを除外するには、--exclude オプションを使用します:

bash
> grep --exclude=*.txt text .

また、ディレクトリを除外するには、--exclude-dir オプションを使用できます:

bash
> grep --exclude-dir=dir text .

注意:--exclude--exclude-dir の値は、ファイル名にマッチングされるグロブ式です。* を使用して任意の文字数にマッチさせ、? を使用して単一の文字にマッチさせることができます。

正規表現を使用する

grep は正規表現をサポートしています。正規表現を使用するには、-E オプションを使用します:

bash
> grep -E 't.xt' file.txt

It has some text in it.

注意:正規表現の中のドットは任意の文字にマッチします。したがって、t.xttext にマッチします。

一般的なGrepコマンドの例

このセクションでは、grepコマンドの実用的な例をいくつか紹介します。

ファイル内の単語を検索する

ファイル内の単語を検索するには、次のコマンドを使用します:

bash
> grep -n -C 2 -i word file.txt

特定のディレクトリ内で単語を検索する

特定のディレクトリ内で単語を検索するには、次のコマンドを使用します:

bash
> grep -r -n -i word /path/to/directory

これは、例えばnode_modulesディレクトリ内で特定の変数名を検索したり、プロジェクトで特定の設定が使用されているかどうかを確認したりするのに便利です。

ディレクトリを除外して検索する

ディレクトリを除外して単語を検索するには、次のコマンドを使用します:

bash
> grep -r -n -i --exclude-dir=dir1 --exclude-dir=dir2 word /path/to/directory

例えば、プロジェクトディレクトリ内で単語を検索するが、node_modulesディレクトリを除外したい場合に使用します。

結論

このチュートリアルでは、grepコマンドの使用方法を紹介しました。これで、ファイルやディレクトリ内の特定のパターンを検索することができます。grepコマンドの詳細については、公式ドキュメントを参照してください。