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

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

grepegrep、、、との技術的な違いを教えてくれる人はいますかfgrep?適切な例を提供できますか?

grepいつオーバーを使用する必要があり、egrepその逆の場合も同じですか?

ベストアンサー1

歴史的に、これらのスイッチは別々のバイナリとして提供されてきました。いくつかの非常に古いUnixシステムでは別々のバイナリを呼び出す必要がありますが、すべての最新システムではスイッチを好みます。 grepのマニュアルページにこれについての詳細があります。

彼らがすることについては、-Egrepを特殊モードに切り替えて、式が通常のパターンマッチングの代わりに拡張正規表現(ERE)として評価されるようにします。この構文の詳細はマニュアルページにあります。

-E, --extended-regexp
PATTERNを拡張正規表現として解釈

この-Fスイッチは、grepを一致させるパターンを許可する別のモードに切り替え、パターンを1行に1つの検索文字列に分割し、特別なパターン一致を実行せずにすべての文字列をORします。

-F, --fixed-strings
PATTERNを改行で区切られた文字列の固定リストとして解釈し、どの文字列も一致します。

以下は、いくつかの例のシナリオです。

  • 10個のUnixユーザー名を含むプレーンテキストのリストを含むファイルがあります。コンピュータのグループファイルを検索して、リストされている10人のユーザーのうち、特別なグループに属する人がいることを確認しようとしています。

    grep -F -f user_list.txt /etc/group
    

    ここでスイッチが機能する理由-Fは、スキーマファイルのユーザー名がプレーンテキスト文字列として解釈されるためです。たとえば、ドットはワイルドカード文字ではなくドットとして解釈されます。

  • カラフルな表現を使って検索したい。たとえば、括弧を使用して、OR演算子として使用されるグループを()表すことができます。|次のコマンドを使用してこの検索を実行できます-E

    grep -E '^no(fork|group)' /etc/group
    

    ..."nofork" または "nogroup" で始まる行を返します。この-Eスイッチがない場合は、関連する特殊文字をエスケープする必要があります。通常のパターンマッチングでは、正確なパターンのみを検索するためです。

    grep '^no\(fork\|group\)' /etc/group
    

おすすめ記事