Linuxコマンドgrepは、作業中に多くのファイルやテキストデータを扱う際に、必要な情報を迅速に見つけるために重要な役割を果たします。今回のポスティングでは、grepコマンドの基本的な使い方と様々なオプションについてご紹介します。
目次
Linuxコマンドgrepとは?
grepは「global regular expression print」の略で、テキストデータから特定のパターンに一致する行を検索し、出力するコマンドです。ファイルの内容やテキスト出力の中で、特定の単語や文字列を検索する際に便利です。
基本的な使い方
grepコマンドの基本形式は次の通りです。
grep [オプション] 検索する_パターン ファイル名
ShellScript今後の例で使用するexample.txtのファイル内容は以下の通りです。
Hello, how are you doing today?
It's a pleasure to meet you.
Nice to meet you as well.
HELLO, this is Charles speaking.
Can I assist you with anything?
Do you need any help?
hello, may I ask you a question?
Could you please help me with this?
hello, I'm calling regarding the job posting.
I'd like to make a reservation.
Plaintext最も基本的な例を見てみましょう。例えば、example.txtファイルで「hello」という単語を検索するには、次のように入力します。
grep "hello" example.txt
ShellScriptこのコマンドは、example.txtファイル内の「hello」という単語が含まれるすべての行を次のように出力します。

次に、「this」が含まれる行をすべて出力した結果です。

主要なオプション
grepコマンドには、検索結果をより細かく制御するための様々なオプションがあります。ここでは、いくつかの重要なオプションを紹介します。
-i (ignore case): 大文字と小文字を区別せずに検索
基本的にgrepは大文字と小文字を区別して検索します。しかし、-iオプションを使用すると、大文字と小文字を区別せずに検索することができます。
grep -i "hello" example.txt
ShellScriptこのコマンドは、「Hello」「HELLO」など、大文字と小文字の組み合わせに関係なく「hello」を含むすべての行を出力します。

-v (invert match): 一致しない行を出力
-vオプションは、検索パターンに一致しない行を出力します。
grep -v "hello" example.txt
ShellScriptこのコマンドは、「hello」が含まれないすべての行を出力します。以下では、-iオプションを併用して、大文字小文字を区別せずに「hello」が含まれない行を出力しています。

-r (recursive): ディレクトリ内のファイルを検索
-rオプションは、指定したディレクトリとそのサブディレクトリ内のすべてのファイルを検索します。
grep -r "hello" /path/to/directory
ShellScriptこのコマンドは、/path/to/directoryディレクトリ内のすべてのファイルから「hello」を検索します。以下の図は、現在のディレクトリ下にあるファイルの中で、helloという文字列が含まれる行を出力したものです。最初には、どのファイルにある内容かがわかるように、ファイル名が一緒に出力されます。

-l (files with matches): パターンが含まれるファイル名を出力
-lオプションは、パターンが含まれるファイル名のみを出力します。
grep -l "hello" *.txt
ShellScriptこのコマンドは、現在のディレクトリ内のすべての.txtファイルのうち、「hello」が含まれるファイルの名前を出力します。

-n (line number): 一致する行番号を出力
-nオプションを使用すると、検索パターンと一致する行番号を一緒に出力します。
grep -n "hello" example.txt
ShellScriptこのコマンドは、「hello」が含まれる行の番号とともに出力します。

-c (count): 一致する行の数を出力
-cオプションは、パターンと一致する行の数を出力します。
grep -c "hello" example.txt
ShellScriptこのコマンドは、example.txtファイルで「hello」が含まれる行の数を出力します。

-A (after context), -B (before context), -C (context): コンテキスト行を出力
-Aオプションは、一致する行の後のN行を、-Bオプションは一致する行の前のN行を、-Cオプションは両側のN行を一緒に出力します。
grep -A 2 "hello" example.txt
ShellScriptこのコマンドは、「hello」が含まれる行とその後の2行を出力します。以後に2行が存在しない場合は、以下の図のように、表示可能な部分だけが出力されます。

次に、-Bオプションを使用して、「hello」が含まれる行とその前の2行を出力します。

最後に、-Cオプションを使用して、「hello」が含まれる行とその前後2行をすべて出力します。

有用な活用方法
ログファイルの解析
システムログファイルで特定のエラーメッセージを検索する際に役立ちます。例えば、/var/log/syslogファイルで「error」メッセージを検索するには、次のように入力します。
grep "error" /var/log/syslog
ShellScriptソースコードの検索
ソースコードファイルで特定の関数呼び出しを検索する際に使用できます。例えば、現在のディレクトリ内のすべての.cファイルでmain関数を検索するには、次のように入力します。
grep -n "main" *.c
ShellScriptディレクトリ内のファイル内容を検索
特定のディレクトリ内のすべてのファイルから検索する際に便利です。例えば、/etcディレクトリ内のすべてのファイルで「network」という単語を検索するには、次のように入力します。
grep -r "network" /etc
ShellScriptまとめ
今回のポスティングでは、grepコマンドの基本的な使い方と様々なオプションについて解説しました。grepは、ファイルやテキストデータを効率的に検索するための強力なツールであり、ログファイルの解析、ソースコードの検索、ディレクトリ内のファイル内容の検索など、様々な用途で活用できます。複数のオプションを適切に活用し、自分にとって最適な検索結果を得ることができるでしょう。grepを上手に活用することで、Linuxでの作業効率が大幅に向上するでしょう。