web-dev-qa-db-ja.com

大文字と小文字を区別しない最も効率的なgrepの使用法は何ですか?

私の目的は、Yahoo!に属するメールアドレスを照合することです。ドメインのファミリー。 * nixシステム(Ubuntuを使用します)では、パターンを一致させるためのこれらの方法のいずれかの利点と欠点は何ですか?

そして、私が想像することができなかった別のよりエレガントなソリューションがある場合は、共有してください。

どうぞ:

  • オプション_-i_でgrepを使用します。

grep -Ei "@(yahoo|(y|rocket)mail|geocities)\.com"

  • 文字をすべて大文字または小文字に変換してからgrep

tr [:upper:] [:lower:] < /path/to/file.txt | grep -E "@(yahoo|(y|rocket)mail|geocities)\.com"

  • パターンに各文字の文字セットを含めます(以下はもちろん「@ rOcketmail.com」のようなものには一致しませんが、各文字を大文字と小文字でチェックするとどうなるかはわかります)。

grep -E "@([yY]ahoo|([yY]|[rR]ocket)[mM]ail|[gG]eo[cC]ities)\.[cC][oO][mM]" /path/to/file.txt

37
sblack89

grep -iは、grepする前に低音に変換するよりも大幅に遅いことが判明したため、最終的に#2のバリエーションを使用しました。

@ mike-w、簡単なテストが大いに役立つことを思い出させてくれてありがとう。

39
sblack89