あなたはすでに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を使用するには、期待される動作を生成するためにメタ文字をエスケープする必要があります。
どちらかの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について理解を深めていただければ幸いです。追加するものがあれば、遠慮なくコメントを投稿してください。