web-dev-qa-db-de.com

Was ist die effizienteste Verwendung von grep ohne Berücksichtigung der Groß- und Kleinschreibung?

Mein Ziel ist es, E-Mail-Adressen abzugleichen, die zum Yahoo! familie von domains. Was sind in * nix-Systemen (ich werde Ubuntu verwenden) die Vor- und Nachteile einer dieser Methoden, um das Muster abzugleichen?

Und wenn es eine andere, elegantere Lösung gibt, die ich mir nicht vorstellen konnte, teilen Sie sie bitte mit.

Hier sind sie:

  • Verwenden Sie grep mit der Option -i:

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

  • Zeichen in Groß- oder Kleinschreibung übersetzen, dann grep:

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

  • Fügen Sie einen Zeichensatz für jedes Zeichen in das Muster ein (das Folgende würde natürlich nicht mit "@ rOcketmail.com" übereinstimmen, aber Sie bekommen die Vorstellung, was daraus werden würde, wenn ich jedes Zeichen auf Groß- und Kleinschreibung überprüfe):

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

37
sblack89

grep -i erwies sich als erheblich langsamer als das Übersetzen in niedrigere Werte vor dem Greifen, sodass ich eine Variation von # 2 verwendete.

Vielen Dank an @ mike-w, dass Sie mich daran erinnert haben, dass ein einfacher Test einen langen Weg zurücklegt.

39
sblack89