GNU/Linux >> Linux の 問題 >  >> Linux

説明しました! grep、egrep、およびfgrepコマンドの違い

あなたはすでにgrepコマンドに精通していると思います。 egrepのような用語に出くわす可能性があります およびfgrep いくつかのインターネットフォーラムの議論で、これらのコマンドは何であり、それらがgrepに関連しているかどうか疑問に思います。

このチュートリアルでは、相違点と類似点を説明するこれらのgrepバリアントについて説明します。

egrepとfgrepとは何ですか? grep、egrep、fgrepの違いは何ですか?

e egrepではextendedとfを表します fgrepではfixedを表します。 egrepは拡張正規表現の使用を許可し、fgrepは正規表現をまったく許可しません。

例を挙げて説明すると、これらすべてがすぐに理解できるようになります。

grepが正規表現で機能することをご存知でしょう。しかし、それは完全な真実ではありません。

デフォルトでは、grepコマンドは基本的な正規表現で機能します。より複雑な検索が必要な場合は、拡張正規表現を使用する必要があります。基本正規表現と拡張正規表現の違いをご覧ください。

egrepコマンドを使用すると、拡張正規表現を使用できます。

一方、fgrepコマンドは、正規表現ではなく固定文字列で機能します。これは、検索パターンをそのまま検索するため、grepよりも高速であることを意味します。

ただし、egrepが表示される場合があります およびfgrep 野生では、それらのステータスは非推奨です。多くのシステムには、これらのバリアントのバイナリがまだ含まれています。

ただし、特別なオプションフラグ(-E)を使用して標準のgrepを使用することがPOSIX標準になりました。 または-F )。これらのフラグは、標準のgrepがそれぞれのコマンドの機能をエミュレートするのに役立ちます。

要約すると:

  • egrep およびfgrep 廃止されたコマンドであるため、避ける必要があります。
  • egrep grep -Eと同等です コマンドを使用すると、拡張正規表現を使用できます。
  • fgrep grep -Fと同等です コマンドを実行すると、検索に固定文字列が使用されるため、検索が高速になります。

例を使用してgrep、egrep、fgrepの違いを理解する

これらのgrepバリアントの違いを示すために短いテキストファイルを作成しました。

[email protected]:~$ cat test.txt 
this is a tasty test
標準のgrepコマンド

これは、基本的な正規表現を使用してパターンを検索するために設計されたgrepの標準バージョンです。 grepを使用するには、期待される動作を生成するためにメタ文字をエスケープする必要があります。

どちらかのtastを検索したいとします。 またはtest 。これが私が使用できるものです:

[email protected]:~$ grep 't\(a\|e\)st' test.txt

括弧をどのようにエスケープする必要があるかに注意してください。これは、拡張正規表現を使用すると、見たり理解したりするのがはるかに簡単になります。

拡張Grep:Egrepまたはgrep -E

Egrepは、拡張を提供するために作成されました メタ文字のサポート。これは、デフォルトでこれらの特殊文字をエスケープすることを意味します。これにより時間が節約され、一般的に式が読みやすくなります。

上で使用したコマンドは、はるかに読みやすいものとして書き直すことができます。

[email protected]:~$ egrep 't(a|e)st' test.txt

egrepバイナリは一貫して{をサポートしていません キャラクター。これにより、予期しない動作が発生する可能性があります。

egrepの一部のバージョンでは、エスケープされた場合にリテラル文字として正しく解釈できます(\{ )。ただし、リテラルの{を照合するためのベストプラクティス 角かっこで囲むことです[{]

固定Grep:Fgrepまたはgrep -F

ソフトウェアの専門家は、計算能力が大幅に向上したとしても、最適化を無視することはできないことを知っています。 Grepは非常に強力なツールですが、システムリソースを不必要に使用する場合があります。

これが、固定grepのアイデアが生まれた場所です。このソフトウェアは、正確な文字列を一致させる必要があるユースケースに最適です。

他のgrepバリアントの強力な表現ツールは備えていません。その弱点は、実際にはそれが超能力です。これにより、ツールがはるかに高速になります。

前述したように、egrepとfgrepは非推奨のコマンドであるため、使用を避ける必要があります。 grep -Eを使用する およびgrep -F 前進する道です。

grep、egrep、fgrepについて理解を深めていただければ幸いです。追加するものがあれば、遠慮なくコメントを投稿してください。


Linux
  1. InnoDBとMyISAMの違いは何ですか?

  2. 停止コマンドとシャットダウンコマンドの違いは?

  3. [[$ a ==Z*]]と[$a==Z *]の違いは?

  1. .exrcと.vimrcの違いは?

  2. ‘$の違い。 Foo」と「$./foo」??

  3. 「env」と「printenv」の違いは?

  1. NssとPamの違いは?

  2. Bash の ${} と $() の違い

  3. ls と l はどう違いますか?