grep
egrep
、、、との技術的な違いを教えてくれる人はいますかfgrep
?適切な例を提供できますか?
grep
いつオーバーを使用する必要があり、egrep
その逆の場合も同じですか?
ベストアンサー1
歴史的に、これらのスイッチは別々のバイナリとして提供されてきました。いくつかの非常に古いUnixシステムでは別々のバイナリを呼び出す必要がありますが、すべての最新システムではスイッチを好みます。 grepのマニュアルページにこれについての詳細があります。
彼らがすることについては、-E
grepを特殊モードに切り替えて、式が通常のパターンマッチングの代わりに拡張正規表現(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