20 Linux での便利な egrep コマンドの例


簡単: このガイドでは、egrep コマンドの実用的な例について説明します。このガイドに従うと、ユーザーは Linux でより効率的にテキスト検索を実行できるようになります。

ログに必要な情報が見つからなくてイライラしたことはありませんか?大規模なデータ セットから必要な情報を抽出することは、複雑で時間のかかる作業です。

オペレーティングシステムが適切なツールを提供しない場合、状況は非常に困難になり、Linux が助けになります。 Linux には、sed、cut などのさまざまなテキスト フィルタリング ユーティリティが用意されています。

ただし、egrep は、Linux でのテキスト処理に最も強力で一般的に使用されるユーティリティの 1 つです。egrep コマンドの例をいくつか説明します。

Linux の egrep コマンドは、ファイル内の特定のパターンを検索して照合するために使用される grep コマンドのファミリーによって認識されます。これは grep -E (grep Extended regex) と同様に機能しますが、ほとんどの場合、特定のファイルまたは行から行までを検索するか、指定されたファイルの行を出力します。

egrep コマンドの構文は次のとおりです。

$ egrep [OPTIONS] PATTERNS [FILES]

例を使用するために、次の内容のサンプル テキスト ファイルを作成してみましょう。

$ cat sample.txt

ここで、テキスト ファイルの準備ができていることがわかります。それでは、日常的に使用できるいくつかの一般的な例について説明しましょう。

簡単なパターン マッチングの例から始めましょう。以下のコマンドを使用して、sample.txt ファイル内の文字列 professional を検索できます。

$ egrep professionals sample.txt

ここで、コマンドが指定されたパターンを含む行を出力することがわかります。

一致したパターンを強調表示することで、出力をより有益なものにすることができます。これを実現するには、egrep コマンドの --color オプションを使用できます。たとえば、次のコマンドはテキスト professionals を赤色で強調表示します:

$ egrep --color=auto professionals sample.txt

ここで、同じ出力が前のものと比較してより有益であることがわかります。また、単語 professionals が 2 回繰り返されていることも簡単に識別できます。

ほとんどの Linux システムでは、上記の設定は次のエイリアスを使用してデフォルトで有効になっています。

$ alias egrep='egrep –color=auto'

egrep コマンドは複数のファイルを引数として受け入れるため、複数のファイルで特定のパターンを検索できます。例でこれを理解しましょう。

まず、sample.txt ファイルのコピーを作成します。

$ cp sample.txt sample-copy.txt

次に、両方のファイルでパターン professionals を検索します。

$ egrep professionals sample.txt sample-copy.txt 

上記の例では、出力にファイル名が表示されています。これは、そのファイルの一致した行を表しています。

パターンがファイルに存在するかどうかを確認する必要がある場合があります。はいの場合、何行で表示されますか?そのような場合、コマンドの -c オプションを使用できます。

たとえば、次のコマンドは、単語 professionals が 1 行にしか存在しないため、出力として 1 を表示します。

$ egrep -c professionals sample.txt

1

前の例では、 -c オプションがパターンの出現回数をカウントしていないことがわかりました。たとえば、単語 professionals は同じ行に 2 回表示されますが、-c オプションはそれを単一の一致としてのみ扱います。

このような場合、コマンドの -o オプションを使用して、一致したパターンのみを出力できます。たとえば、次のコマンドは professionals という単語を 2 行に分けて表示します。

$ egrep -o professionals sample.txt

それでは、wc コマンドを使用して行数を数えましょう。

$ egrep -o professionals sample.txt | wc -l

上記の例では、egrep コマンドと wc コマンドの組み合わせを使用して、特定のパターンの出現回数をカウントしています。

デフォルトでは、egrep は大文字と小文字を区別してパターン マッチングを実行します。それは単語を意味します – we、We、wE、および WE は別の単語として扱われます。ただし、 -i オプションを使用して、大文字と小文字を区別しない検索を強制できます。

たとえば、次のコマンド パターン マッチは、テキスト weWe で成功します。

$ egrep -i we sample.txt 

前の例では、egrep コマンドが部分一致を実行することがわかりました。たとえば、we というテキストを検索すると、他のテキストでもパターン マッチングが成功しました。ウェブ、ウェブサイト、だったなど。

この制限を克服するために、単語全体の一致を強制する -w オプションを使用できます。

$ egrep -w we sample.txt

これまでのところ、egrep コマンドを使用して、特定のパターンが存在する行を出力しました。ただし、逆の方法で操作を実行したい場合もあります。

たとえば、指定されたパターンが存在しない行を印刷したい場合があります。 -v オプションを使用してこれを実現できます。

$ egrep -v we sample.txt

ここで、コマンドがテキスト we を含まないすべての行を出力していることがわかります。

コマンドの -n オプションを使用して行番号付けを有効にできます。これにより、パターン マッチングが成功したときに出力に行番号が表示されます。この単純なトリックにより、出力がより意味のあるものになります。

$ egrep -n professionals sample.txt

上記の出力では、professionals という単語が 5 行目にあることがわかります。

quiet モードでは、egrep コマンドは一致したパターンを出力しません。そのため、コマンドの戻り値を使用して、パターン マッチングが成功したかどうかを識別する必要があります。

コマンドの -q オプションを使用して、シェル スクリプトを作成するときに便利なサイレント モードを有効にできます。

$ egrep -q professionals sample.txt
$ egrep -q non-existing-pattern sample.txt

この例では、ゼロの戻り値はパターンの存在を示し、ゼロ以外の値はパターンの不在を示します。

場合によっては、一致したパターンの周りに数本の線を表示することが理にかなっていることがあります。このようなシナリオでは、コマンドの -B オプションを使用できます。これにより、一致したパターンの前に N 行が表示されます。

たとえば、次のコマンドは、パターン マッチが成功した行とその 2 行前を出力します。

$ egrep -B 2 -n professionals sample.txt 

この例では、 -n オプションを使用して行番号を表示しています。

同様に、コマンドの -A オプションを使用して、パターン マッチの後に行を表示できます。たとえば、次のコマンドは、パターン マッチが成功した行と次の 2 行を出力します。

$ egrep -A 2 -n professionals sample.txt

これに加えて、egrep コマンドは、オプション -A-B の機能を組み合わせた -C オプションをサポートしています。一致したパターンの前後の行。

$ egrep -C 2 -n professionals sample.txt 

前述のように、複数のファイルに対してパターン マッチングを実行できます。ただし、ファイルが複数のサブディレクトリの下に存在し、それらすべてをコマンド引数として渡す場合、状況はややこしくなります。

このような場合、次の例に示すように、 -r オプションを使用して再帰的にパターン マッチングを実行できます。

まず、2 つのサブディレクトリを作成し、そこに sample.txt ファイルをコピーします。

$ mkdir -p dir1/dir2
$ cp sample.txt dir1/
$ cp sample.txt dir1/dir2/

それでは、再帰的な方法で検索操作を実行しましょう。

$ egrep -r professionals dir1

上記の例では、dir1/dir2/sample.txt および dir1/sample.txt ファイルのパターン マッチが成功したことがわかります。

ドット (.) 文字を使用して、行末を除く任意の 1 文字に一致させることができます。たとえば、次の正規表現は、テキスト har、hat、および has に一致します。

$ egrep "ha." sample.txt

アスタリスク (*) を使用して、前の文字の 0 回以上の出現に一致させることができます。たとえば、次の正規表現は、文字列 we の後に文字 b が 0 回以上出現するテキストに一致します。

$ egrep "web*" sample.txt

プラス (+) を使用して、前の文字の 1 つ以上の出現に一致させることができます。たとえば、次の正規表現は、文字列 we の後に文字 b が少なくとも 1 回出現するテキストに一致します。

$ egrep "web+" sample.txt

ここで、文字 b がないため、単語 wewere のパターン マッチングが成功していないことがわかります。

キャレット (^) を使用して、行の開始を表すことができます。たとえば、次の正規表現は、テキスト We で始まる行を出力します。

$ egrep "^We" sample.txt

ドル ($) を使用して、行の終わりを表すことができます。たとえば、次の正規表現は、テキスト e. で終わる行を出力します。

$ egrep "e.$" sample.txt

キャレット (^) の直後にドル ($) を使用して、空の行を表すことができます。これを正規表現で使用して、空行を削除しましょう。

$ egrep -n -v "^$" sample.txt

上記の出力では、行番号 2、4、6、8、および 10 が空であるため表示されていないことがわかります。

この記事では、egrep コマンドの便利な例をいくつか説明しました。これらの例を日常生活で使用して、生産性を向上させることができます。

Linux の egrep コマンドの最良の例を他に知っていますか?以下のコメント欄でご意見をお聞かせください。