Quel est le plus efficace de la casse grep utilisation?

Mon objectif est de faire correspondre les adresses e-mail qui appartiennent à la Yahoo! la famille de domaines. Dans les systèmes *nix (je vais utiliser Ubuntu), quels sont les avantages et les inconvénients de chacune de ces méthodes pour la mise en correspondance du modèle?

Et si il y a une solution plus élégante que je n'ai pas été capable d'imaginer, s'il vous plaît partager.

Ici, ils sont:

  • Utilisation grep avec l'option -i:

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

  • Traduire les caractères de toutes les majuscules ou en minuscules puis grep:

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

  • Comprennent un jeu de caractères pour chaque caractère dans le modèle (ci-dessous serait bien sûr de ne pas correspondre à quelque chose comme "@rOcketmail.com" mais vous avez l'idée de ce qu'elle deviendrait si j'ai vérifié chaque caractère de cas):

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

  • Ce ne serait pas difficile à tester. Avez-vous essayé?
  • Avez-vous essayé de benchmarking? Je soupçonne que votre premier échantillon sera la plus rapide. Je pense que ce problème est plus susceptible d'être étranglé par un fichier I/O que la vitesse de traitement... car il est linéaire en la taille de l'entrée. Méfiez-vous de micro-optimisation.
  • Une chose que vous voudrez peut-être garder à l'esprit est que la capture des groupes peut être coûteux. Si vous n'avez pas besoin de retourner les groupes de valeurs, pensez à utiliser (?:) à la place.
InformationsquelleAutor sblack89 | 2014-04-07