「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
    

答え2

からman grep

egrep は grep -E と同じです。
 fgrep は grep -F と同じです。 egrepに直接電話するか、  
  fgrep は使用されなくなりましたが、記録アプリケーションを許可するために提供されます。
  変更されていない状態で実行できます。

あなたが使用するかfgrepgrep -Fいいえgrep文字列がパターンとして解釈されることを願っています。

拡張正規表現を使用する必要がある場合、egrepまたはを使用できます。grep -E

答え3

egrepfgrepデフォルトではgrep -Egrep -F(それぞれ)と同じです。

   -E, --extended-regexp
          Interpret PATTERN as an extended regular  expression  (ERE,  see
          below).  (-E is specified by POSIX.)

   -F, --fixed-strings
          Interpret  PATTERN  as  a  list  of  fixed strings, separated by
          newlines, any of which is to be matched.  (-F  is  specified  by
          POSIX.)

ただし、エラーメッセージは異なる場合があります。

答え4

逐語的文字列を検索し、渡された文字列が逐語的に解釈されるようにするには(つまり、ドットや疑問符が他のものとして解釈される危険性なしに)、fgrepまたはegrep -Fを使用します。

egrepとgrepの違いについては、egrepがほとんどの場合欲しいものだと思います。 GNUマニュアルサイト構文にあるように見えるgrepとegrepの違いをリストします。一部にはスラッシュが必要ですが、他にはありません。私はegrepがperl正規表現とjavascript正規表現とより「互換性がある」ので、egrepを使用する方が簡単だと思います。

ところで。私はあなたが寄付することを本当に奨励します確認する一度試してみてください。 PREGをサポートし、より便利なデフォルト値があります(たとえば、色付け、必要なものではない可能性があるディレクトリをスキップ(たとえば、.svn)、シンボリックリンクをたどる機能、ack入力がgrep -Eより少し簡単です)。 。

関連情報