2014-04-07 15 views
32

Mein Ziel ist es, E-Mail-Adressen, die zum Yahoo! Familie von Domänen. In * nix-Systemen (ich werde Ubuntu verwenden), was sind die Vor- und Nachteile einer dieser Methoden für die Anpassung des Musters?Was ist die effizienteste Groß-/Kleinschreibung bei Groß- und Kleinschreibung?

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

Hier sind sie:

  • Verwenden grep mit Option -i:

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

  • Zeichen Übersetzen Sie zum Großbuchstaben oder Kleinbuchstaben dann grep:

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

  • Fügen Sie für jedes Zeichen in dem Muster einen Zeichensatz (die unten würde natürlich nicht paßt so etwas wie „@ rOcketmail.com“, aber Sie bekommen die Idee von dem, was es werden würde, wenn ich jede geprüft Zeichen für Fall):

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

+5

Dies wäre nicht schwierig zu testen. Hast du es versucht? –

+1

Haben Sie ein Benchmarking versucht? Ich vermute, dass Ihre erste Probe am schnellsten sein wird. Ich erwarte, dass dieses Problem eher durch Datei-I/O als Verarbeitungsgeschwindigkeit gedrosselt wird, da es in der Größe der Eingabe linear ist. Vorsicht vor [Mikrooptimierung] (http://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/). – Floris

+0

Eine Sache, die Sie beachten sollten, ist, dass die Erfassung von Gruppen teuer sein kann. Wenn Sie die gruppierten Werte nicht zurückgeben müssen, sollten Sie stattdessen '(? :)' verwenden. – CAustin

Antwort

34

grep -i drehten deutlich langsamer zu sein als vorher greppen zu übersetzen absenkt, so dass ich endete 2 mit einer Variation von # auf.

Dank @ mike-w für mich daran zu erinnern, dass ein einfacher Test einen langen Weg geht.

+4

Und vielen Dank für das Teilen der Ergebnisse Ihrer Tests mit uns allen! – Dan

Verwandte Themen