Linux システムのシステム管理者は、Linux の巨大なログ ファイルを解析する必要がある場合があります。特にパターンを一致させる必要がある場合には、骨の折れる作業のように思えるかもしれません。ありがたいことに、Linux の
grep
コマンドは、このような状況に役立ちます。 grep コマンドとは何なのか、またどのように機能するのか疑問に思われる場合は、この便利な Linux コマンドを理解するのに役立つ簡単なガイドを以下に用意しました。
Linuxのgrepコマンドとは何ですか
grep コマンドは Linux の強力なコマンド ライン ツールで、ファイル、ディレクトリ、さらには他のコマンドの出力内で特定のパターンや文字列を検索して除外するために使用されます。その珍しい名前について疑問に思っているかもしれません。これは「Global Regular Expression Print」の略です。これは、1973 年に Ken Thompson によって Unix オペレーティング システム用に初めて導入されました。 grep コマンドは、その多用途性と使いやすさにより、すべての Linux ユーザーにとって必須のツールです。
通常、grep コマンドはほとんどの Linux ディストリビューションにプリインストールされていますが、システムにない場合は、次のコマンドを使用してインストールします。
- Debian ベースのシステムにインストールします 。
sudo apt install grep
- Fedora ベースのシステムにインストールします。
sudo yum install grep
- Arch ベースのシステムにインストールします。
sudo pacman -S grep
Linux Grep コマンド: 構文とオプション
Linux での
grep
コマンドの使用は、その単純な構文と複数のオプションを利用できるため、非常に簡単です。
grep
コマンドを使用する構文は次のとおりです。
grep <options> <pattern> <file_or_directory>
上記の構文で、<pattern> を検索するパターンに置き換えます。<file> 部分は、検索するファイル/ディレクトリに置き換えます。<options> 部分には、次のものがあります。次のようなさまざまなオプションを使用できます。
オプション
説明
-E
<pattern> を正規表現として解釈します。
-i
<pattern> を検索し、大文字と小文字を区別しません。
-v
<pattern> に一致しない行を表示します。
-c
一致する行の数をカウントします。
--color
結果を色付きの出力で表示します。
Linux で Grep コマンドを使用する方法
grep コマンドの使用は簡単で、単純な構文に従います。必要なのは、検索するファイル名またはディレクトリと、一致させたいパターンを指定することだけです。パターンには、正確な単語または正規表現を使用できます。ここでの「正規表現」とは何ですか?正規表現は、特定の領域で使用されると異なる方法で解釈される特別な文字列です。それらは、パターンに一致するすべての可能な組み合わせに置き換えられます。
たとえば、電子メール アドレスを照合したい場合は、正規表現「
(.+)\@(.+)\n
」を使用できます。複雑そうですか?これを詳しく見てみましょう:
-
(.+)
は改行を除く任意の文字に一致します -
\@
指定された文に「@」記号が存在するかどうかを確認します。
正規表現とは何か、および grep コマンドがどのように機能するかがわかったので、次は Linux で grep コマンドを使用する方法を見てみましょう。
grepコマンドでファイル内の文字列を検索する
grep を使用する最も一般的な方法は、ファイル内の特定の文字列を検索することです。 grep コマンドを使用してファイルを検索する基本的な構文は次のとおりです。
grep <options <string_to_search> <file_name>
<string_to_search> 部分では、検索する正確な文字列を指定する必要があります。たとえば、
fruits.txt
という名前のファイル内で文字列「mango」を検索する場合は、次のコマンドを使用します。
grep "mango" fruits.txt
大文字と小文字を区別せずに検索したい場合は、上記の例のように grep コマンドで -i フラグを使用します。
grep -i "mango" fruits.txt
grep を使用して複数のファイルを検索する
grep コマンドを使用すると、単一のファイルだけでなく、複数のファイルも検索できます。この機能は、複数の大きなファイルを処理する必要がある場合に特に便利です。 grep コマンドを使用して複数のファイル内の文字列/パターンを検索する構文は次のとおりです。
grep <options> <string_to_search> <file_1> <file_2>
たとえば、ファイル「student1.txt」および「student2.txt」内で文字列「student」を検索する場合は、次のコマンドを使用します。
grep "John" student1.txt student2.txt
grep を使用してディレクトリ内のすべてのファイルを検索する
文字列を検索する必要があるが、それが存在するファイル名を思い出せないとします。ディレクトリに存在するすべてのファイル名を記述することもできますが、その代わりに、次のように単純に「
*
」ワイルドカードを使用することもできます。
grep <options> "pattern_to_search" *
たとえば、ディレクトリに存在するすべてのファイルで文字列「apple」を検索する場合は、次のコマンドを使用します。
grep "apple" *
特定のファイル タイプのみを検索する場合は、次の構文を使用します。
grep <options> "pattern_to_search" *.<file_extension>
たとえば、.txt ファイル内でのみ「mango」という単語を検索する場合は、次のコマンドを使用します。
grep "mango" *.txt
grep での正規表現の使用
他のツール/コマンドに比べて grep コマンドを使用する主な利点は、正規表現を処理してコンテンツを検索できることです。 grep コマンドに -e フラグを含めるだけで、正規表現を使用して検索できます。
grep -e <pattern_to_search> <filename>
たとえば、電子メール ID をフィルターで除外する場合は、次のコマンドを使用します。
grep -e "(.+)\@(.+)" emails.txt
grepコマンドを使用して複数のキーワードを検索する
ここまでで、grep を使用したパターンや単語の検索に慣れてきたはずです。しかし、複数の単語/パターンを検索する必要がある場合はどうすればよいでしょうか?まあ、grep を使えばそれもカバーできます。 grep コマンドを使用して複数の単語を検索するには、次の構文を使用します。
grep "<query1>\|<query2>" filename
ここで、\| 2 つのクエリのいずれかが一致した場合に結果を出力する grep を指定します。たとえば、「fruits.txt」ファイル内で「apple」と「mango」という単語を検索する場合は、次のコマンドを使用します。
grep "apple\|mango" fruits.txt
grep コマンドを使用して一致結果をカウントする
場合によっては、一致する結果の数を知る必要があるかもしれません。このために、grep コマンドで -c フラグを使用できます。
grep -c "pattern_to_search" filename
たとえば、ファイル
student1.txt
に含まれる電子メール ID の数を確認する必要がある場合は、次のコマンドを使用します。
grep -E -c "(.+)@(.+)" student1.txt
検索クエリに一致しない行数を確認したい場合は、-v フラグを -c とともに追加します。
grep -v -E -c "(.+)@(.+)" student1.txt
シェルパイプでの grep コマンドの使用
Linux でのシェル パイプの動作方法は、あるコマンドの出力を別のコマンドに入力として送信することです。シェル パイプを使用する基本的な構文は次のとおりです。
first_command | second_command
シェル パイプを使用すると、スクロールして何かを探し続ける代わりに、grep コマンドを使用して一部のコマンド出力をフィルタリングすることがはるかに簡単になります。特定のコマンド出力から特定の単語またはパターンをフィルターで除外するには、上記の構文の <first_command> をコマンドに置き換え、grep コマンドの構文を使用して 2 番目のコマンドを追加します。仕組みは次のとおりです。
first_command | grep <options> <pattern_to_look_for>
たとえば、gcc コマンドが以前に実行された回数を確認したい場合は、次のコマンドを使用できます。
history | grep gcc
これにより、以下の図に示すように、「gcc」という単語を含む結果のみが表示されます。
Linux での grep コマンドの使用
grep コマンドは、さまざまなファイル、ディレクトリ、さらには他の Linux コマンド出力内で特定のパターンや単語を検索したいユーザーにとって不可欠なツールです。重要なオプションと構文をすべて理解したら、grep コマンドを使用すると生産性が飛躍的に向上します。ここにいる間に、Ubuntu 23.04 の新機能をチェックしてください。
Linux の Grep コマンドに関するよくある質問
デフォルトでは、grep は大文字と小文字を区別して動作します。ただし、大文字と小文字を区別せずに検索する必要がある場合は、-i フラグを使用します。
grep の修正バージョンである Zgrep は、圧縮ファイルの検索に使用できます。 zgrep コマンドを使用して圧縮ファイルを検索する構文は次のとおりです。
zgrep "<pattern_to_search>" <compressed_file>