ウェブサイト検索

Debian 10 で grep コマンドを使用する方法


grep は、グローバル正規表現印刷の略です。これは便利なコマンドであり、通常のファイルやシステム内で文字列やパターンを検索する際に Linux システム エンジニアによって広く使用されています。

この記事では、grep コマンドの使用法を多数の例を使って説明します。すべてのコマンドと例を Debian 10 マシンでテストしました。

前提条件

root 権限を持つ単一の Debian 10 マシンが必要です。

Debian 10 への grep コマンドのインストール

デフォルトでは、grep は Debian 10 を含むほとんどのシステムにインストールされています。インストールされていない場合は、ターミナルを開き、root 権限で次のコマンドを実行します。

apt-get install grep

確認を求められたら、y を押してキーボードから入力します。インストールが完了するまで待ちます。

私のマシンには grep がすでにインストールされているので、上のスクリーンショットを確認してください。ターミナルで次のコマンドを実行してバージョンを確認してみましょう。

grep --version

以下に示すように、バージョンとその他の詳細も返されます。

grepコマンドを使用する

マシン上で grep コマンドが利用可能になったら、それを使ってみましょう。

システム内の特定のファイルまたはディレクトリを検索する

システム内の特定のファイルを検索または見つけたい場合、コマンドの構文は次のようになります。

ls -l <検索ディレクトリのパス> | grep -i "ファイルまたはディレクトリ名"

/etc/ 内のネットワーク ディレクトリを検索したいと考えています。完全なコマンドは次のようになります。

ls -l /etc/ | grep -i "network"

「i」オプションは大文字と小文字の区別を無視します。したがって、ネットワーク、ネットワーク、またはネットワークを同様のものとして扱う必要があります。

以下はサンプル出力です。

/etc/network/ にある「interfaces.d」ファイルを検索したいとします。次のコマンドを実行する必要があります。

ls -l /etc/network/ | grep -i "interfaces.d"

検索したい単語にスペースが含まれる場合は、二重引用符で囲む必要があります。 「ネットワーク デーモン」を検索しているとします。上記のコマンドは次のようになります。

ls -l /etc/network/ | grep -i "インターフェースデーモン"

grep を使用して完全な単語を検索する

お気づきかもしれませんが、grep は「ネットワーク」を含むあらゆる種類の結果を返しました。ネットワーク、ネットワーク化、ネットワーキング、または abcnetworking など。その特定の単語を含むように検索を制限したい場合は、次のように -w オプションを使用する必要があります。

ls -l /etc/ | grep -i -w network

以下はサンプル出力です。

ファイル内の特定のテキストを検索する

大きなファイルがあり、特定のテキストを検索したい場合があります。コマンドの構文は次のようになります。

grep - i "textyouwanttosearch" "ファイル名とパス"

現在のディレクトリ内にある test.txt で「fox」という単語を検索するとします。ターミナルで次のコマンドを実行します。

grep -i "fox" test.txt

以下は、「fox」という単語を含むファイルの行のみを返すサンプル出力です。

再帰的検索を実行する(複数のファイルを検索する)

ディレクトリ内の多数のファイルやサブディレクトリからテキストを検索する場合は、-r オプションを使用して再帰的調査を実行できます。

grep -i -r "fox"

以下は、表示された行の test.txt ファイルとtree.txt ファイルの両方に単語 fox が存在することを示すサンプル出力です。

ディレクトリ パスを指定することもでき、そのディレクトリとそのサブディレクトリ内のすべてのファイルが検索されます。

/etc/ とそのサブディレクトリ内のテキスト「interfaces」について再帰的調査を実行したいとします。コマンドは次のように実行する必要があります。

grep -i -r interfaces /etc/

以下はサンプル出力です。

1 つの grep コマンドで 2 つの異なる単語を検索する

次のように、1 つの egrep (grep のバリエーション) コマンドで 2 つの異なる単語を検索できます。 -r オプションを使用して、複数のファイルで fox と Lazy という完全な単語を検索したいとします。ターミナルで次のコマンドを実行する必要があります。

egrep -w -r "fox|lazy"

以下はサンプル出力です。

テキストと一致する行に番号を付ける

もう 1 つの便利なオプションは、テキストに一致する行に番号を付ける -n です。以下は、-n オプションの使用方法を示す例です。

grep -i -n "fox" test.txt

以下は、単語「fox」に一致する行に番号を付けるサンプル出力です。

検索を反転する

これは上で行ったことの逆です。指定した単語を含まないテキストを返したい場合は、-v オプションを使用できます。

以下は、-v オプションの使用例を示しています。

grep -v -i "fox" test.txt

以下はサンプル出力です。

上記のすべてのオプション (-n など) は、-v オプションと一緒に適用することもできます。

試合数を数える

特定のテキストに対する一致の数をカウントしたいだけの場合は、-c オプションを使用できます。

現在のディレクトリ内にある test.txt 内の「fox」という単語を数えてみましょう。ターミナルで次のコマンドを実行します。

grep -i -c fox test.txt

以下は、上記のコマンドを実行した後の出力例で、test.txt ファイル内で fox という単語が 3 回一致したことを示しています。

特定のテキストに一致するファイル名を表示する

特定の単語が含まれるファイルを見つけたい場合は、次のように -l オプションを -r と一緒に使用できます。すべてのファイルが現在のディレクトリ内にあり、検索または一致する特定の単語が「fox」であると仮定します。

grep -i -r -l fox

以下は、単語 fox が test.txt 内とサブディレクトリおよびファイル asif.txt に存在することを示すサンプル出力です。

一致したテキストのみを表示する

デフォルトでは、grep は目的のテキストまたは単語に一致する行全体を表示します。 grep で一致した単語を表示したい場合は、次のように -o オプションを使用できます。

grep -i -o fox test.txt

以下はサンプル出力です。

特定の単語で始まる行を表示する

特定の単語で始まるすべての行を取得したい場合は、次のように ^演算子を使用できます。

「unix」で始まるすべての行を返したいと仮定します。ファイルは現在のディレクトリ内にある log.txt です。

ターミナルで次のコマンドを実行します。

grep -i "^unix" log.txt

以下はサンプル出力です。

特定の単語で終わる行を表示する

特定の単語で終わるファイルからこれらの行をすべて返したい場合は、次のように $演算子を使用できます。単語が "linux" で、検索するファイルが現在のディレクトリ内にある rev.txt であると仮定します。

ターミナルで次のコマンドを実行します。

grep -i "linux$" rev.txt

以下はサンプル出力です。

以上、grepコマンドの使い方についてのチュートリアルでした。主に使用され、日常の仕事で必要になる可能性のある grep オプションのほとんどを説明しました。 grep コマンドには、zgrep などのバリエーションがいくつかあります。自分で調べることができます。

関連記事: