Grepは、グローバル正規表現printの略です。これは便利なコマンドであり、Linuxシステムエンジニアが通常のファイルやシステム内で文字列やパターンを検索するときに広く使用されています。
この記事では、多数の例を使用してgrepコマンドの使用法を示します。 Debian10マシンですべてのコマンドと例をテストしました。
前提条件
root権限を持つDebian10マシンが1台必要です。
Debian10へのgrepコマンドのインストール
デフォルトでは、grepはDebian 10を含むほとんどのシステムにインストールされています。インストールされていない場合は、ターミナルを開き、root権限で次のコマンドを発行します。
apt-get install grep
確認を求められたら、yを押してからキーボードから入力します。インストールが完了するのを待ちます。
grepはすでに私のマシンにインストールされているので、上のスクリーンショットを確認してください。ターミナルで次のコマンドを実行して、バージョンを確認しましょう。
grep --version
また、以下に示すように、他の詳細とともにバージョンを返す必要があります。
grepコマンドの使用
マシンでgrepコマンドを使用できるようになったら、それを試してみることができます。
システム内の特定のファイルまたはディレクトリを検索する
システム内の特定のファイルを検索または検索する場合、コマンドの構文は次のようになります。
ls -l <pathofdirectorytosearch> | 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「interfacesdaemon」
grepを使用して完全な単語を検索する
お気づきかもしれませんが、grepは「ネットワーク」を含むあらゆる種類の結果を返しました。 network、networked、networking、abcnetworkingなど。特定の単語を含むように検索を制限する場合は、次のように-wオプションを使用する必要があります。
ls -l /etc/ | grep -i -w network
以下は出力例です。
ファイル内の特定のテキストを検索する
大きなファイルがあり、特定のテキストを検索したい場合があります。コマンドの構文は次のようになります。
grep –i「textyouwanttosearch」「filenameandpath」
現在のディレクトリ内にある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
以下は、上記のコマンドを実行した後の出力例です。これは、単語foxがtest.txtファイルで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オプションのほとんどを示しました。 zgrepなどを含むgrepコマンドにはいくつかのバリエーションがあります。自分でそれらを探索できます。