Cygwinでgrepを使用して予期しない表示 `( '

Cygwinでgrepを使用して予期しない表示 `( '

私はWindows 7オペレーティングシステムでCygwinを使用しています。

次の形式でメールを照合しようとしています。x.y@enron.com

これは私の正規表現です。

grep [a-zA-Z0-9]+\.[a-zA-Z0-9]+@(E|e)nron\.com

それは戻ってくる

-bash: syntax error near unexpected token `('

使用時に動作します正規表現101.com

[email protected]次の電子メールと一致する必要があります。[email protected]

答え1

[、、、\および(これらはすべてシェルで特別な意味を持ち、)コマンドパラメータ(ここ)でそのまま渡す場合はgrep引用する必要があります。

また、このような範囲は[a-z]Cロケールの外ではほとんど意味がありません。

したがって、ここで次のことができます。

LC_ALL=C grep -xE '[[:alnum:]]+\.[[:alnum:]]+@(E|e)nron\.com' < some-file

または:

LC_ALL=C grep -xE '[[:alnum:]]+\.[[:alnum:]]+@[Ee]nron\.com' < some-file

E拡張正規表現eに一致する行を報告しますxal数字はnumロケールの文字に制限されますC(Cygwinでは発音区別記号とアラビア語の10進数を持たないASCII英語/ラテン文字、Cロケールでは[[:alnum:]]同じ[a-zA-Z0-9])。

上記では、最も強力な引用形式が使用されました'...'(特殊文字なし)。

+, |,(...)はい拡大する正規表現演算子(基本的なgrep)なしで予想どおり正規表現演算子を使用します-E。いいえ-xgrep一致するものを探します。以内に行なので、たとえば、次の行が一致します。

[email protected] [email protected] whatever
              ^^^^^^^^^^^^^

それ以外の場合は、LC_ALL=C他の[[:alnum:]]アルファベット文字(ギリシャ語、キリル文字、韓国語など)の文字と一致する可能性があり、分音符付きの[a-z]一部のラテン文字(たとえば)と一致する可能性がありますが、次のような他の文字は一致しませんáçÿź後ろに z...

関連情報