Linux での GREP の理解: 使用法とアプリケーション
Grep は、パターン検索用に設計されたコンパクトな UNIX ツールです。もともと V6 UNIX で導入され、Linux、macOS、BSD バリアントを含むさまざまな UNIX 系オペレーティング システムで定番となっています。この記事では、Grep の基本的な機能について説明し、日常のタスクに適用する実用的な例を紹介します。
Grepの基本を理解する
Grep の主な機能は単純明快です。入力を処理して、一致するテキスト パターンを識別し、表示します。このユーティリティは、ほぼすべてのプレーン テキスト ソースを調べることができるため、ファイルを直接スキャンしたり、他のコマンドからの出力を操作したりできます。
Grep を使い始めるには、最も簡単なコマンドの 1 つは、テキスト ファイルから読み取ることです。たとえば、sample.txt
次のコマンドで の内容を表示できます。
テキスト ファイル内の特定の単語を検索することもできます。
さらに、Grep を UNIX パイプと組み合わせて、複数のコマンドを 1 つの操作に統合することもできます。
Linux でページャーがどのように動作するかについて詳しく知るには、GNU less のチートシートを参照してください。
ディレクトリ内のファイルの検索
Grep の実用的な用途の 1 つは、ディレクトリ内のファイルを検索することです。ls
コマンドの出力を Grep に直接パイプすることができます。
たとえば、次のコマンドは、ダウンロード ディレクトリ内のすべての JPEG ファイルを拡張子を強調表示して表示します。
出力を拡張してls
、より複雑なパターン マッチングを実行することもできます。たとえば、次のコマンドは、現在のディレクトリにある 1 MB 未満のすべてのファイルを一覧表示します。
大文字と小文字の区別を無視する
デフォルトでは、ほとんどの UNIX 系ツールは大文字と小文字を区別します。つまり、文字列「Hello」、「hello」、「hEllo」、「helLo」はそれぞれ異なるエントリとして解釈されます。
これは、特に単語の大文字と小文字が異なる場合、テキスト検索を複雑にする可能性があります。これを軽減するには、-i
検索語とフラグを組み合わせて Grep を使用します。
再帰的に検索する
Grep には、複数のファイルまたはディレクトリ全体を同時に検索する機能があります。これは、さまざまなファイルを含むプロジェクトを調べ、ディレクトリ全体で特定のテキストの出現箇所を検索する場合に特に便利です。たとえば、次のコマンドを使用して、「sample」ディレクトリ内の「MakeTechEasier」という用語を検索します。
フラグを使用すると、-r
Grep は指定されたディレクトリ内のすべてのファイルを調べるよう強制されますが、これにはテキスト以外のファイルも含まれる可能性があります。この状況を回避するには、-I
フラグも使用します。
特定の文字列でファイルを識別する
Grep は、ファイル内の文字列の出現場所を表示するだけでなく、検索対象のテキストを含むファイルのリストを生成することもできます。これは、見つかったすべてのインスタンスを表示せずに、ファイルに特定のコンテンツが含まれているかどうかを確認したい場合に役立ちます。
これを実現するには、次のフラグと-r
、-l
ターゲット文字列および検索するディレクトリを指定して Grep を使用します。
さらに、Grep コマンドを Bash サブシェル内にカプセル化して、複数の検索条件を適用することもできます。たとえば、次のコマンドは、「sample」ディレクトリ内の「Hello」と「MakeTechEasier」の両方を含むファイルを返します。
一致しない結果の表示
標準の検索に加えて、Grep では指定した条件を除外した結果も生成できます。この機能は、テキスト入力内のエラーや不規則性を検出する必要がある場合に非常に役立ちます。
これを実行するには、-v
フラグを好みのオプションと組み合わせて使用します。たとえば、次のコマンドは「/etc/nginx」ディレクトリ内のすべてのファイルを再帰的にスキャンし、「nginx」という文字列を含まない行を返します。
言葉と行の探求
また、特定のパターンに一致する文字列ではなく、単語全体または行全体を検索するように Grep に指示すると効果的です。この方法は、さまざまな単語によく見られる文字列をターゲットにする場合に特に便利です。たとえば、「it」という語を検索すると、他の多くの単語にも出現するため、多数の誤検出が発生する可能性があります。
これを解決するには、-w
フラグの後に目的の単語を指定して Grep を実行します。
Grep は、検索パターンを含むすべてのインスタンスを返すのではなく、単語自体のみを出力します。これは、フラグを使用する場合にも行全体に適用される-x
ため、構成ファイル内のフレーズや正確な行を見つけるのに特に便利です。
Grep 出力に行番号を組み込む
行番号は、コードのデバッグやドキュメントのレビューにおいて重要な役割を果たします。行番号により、特定の行や関数の位置を正確に特定するプロセスが簡素化され、修正作業が大幅にスピードアップします。
Grep には、出力に行番号を含める機能があります。-n
検索語とともにフラグを付けてコマンドを実行すると、この機能が有効になります。
UNIX パイプと組み合わせると、Grep の出力を絞り込んで、検索結果の行番号だけを表示することができます。この方法は、大量のテキストを処理する場合に特に便利です。
Grep による拡張正規表現の使用
Grep は、テキストを一致させるための主なメタ文字として基本正規表現 (BRE) を使用します。これはさまざまなタスクで機能しますが、特にパターン グループを調べる場合、ユーザーは制限を感じることがあります。
機能を拡張するために、多くの Grep 実装では、-E
拡張正規表現 (ERE) の解析を有効にするフラグが組み込まれています。たとえば、以下のコマンドでは-E
フラグが必要です。
-F
さらに、Grep には正規表現の機能を完全に排除する特別なモードがあります。これを有効にするには、フラグの後に単純な文字列を指定してコマンドを実行します。
Grep 出力に周囲の行を含める
Grep の強みは、入力またはファイル内のテキストの出現場所を明らかにすることです。ただし、トラブルシューティングの際には、正確な場所を表示するだけでは不十分な場合があります。クラッシュ ログで見つかるような文字列の周囲のコンテキストは、多くの場合、重要な洞察を提供します。
追加のコンテキストを出力するには、-C
検索結果の前後に表示する行数とフラグを組み合わせて Grep を実行します。たとえば、ターゲット文字列の周囲 5 行を表示するには、次のコマンドを使用します。
-B
フラグとフラグを使用して、前の行または次の行だけを選択して印刷することで、結果をカスタマイズすることもできます-A
。たとえば、次のコマンドは、検索語の後の 10 行を表示します。
Grep の基礎知識と、一般的なタスクで Grep を活用する方法を習得したので、コマンド ラインと UNIX エコシステムのより広範な部分についてさらに詳しく調べる準備が整いました。Linux で sed を使用して、さらに強力なテキスト処理を実行する方法を学習して、さらに詳しく調べてください。
画像クレジット: Alejandro Escamilla (Unsplash 経由)。すべての変更とスクリーンショットは Ramces Red によるものです。
コメントを残す