Quelle est l'utilisation grep insensible à la casse la plus efficace?

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

Et s'il y a une autre solution plus élégante que je n'ai pas été capable d'imaginer, veuillez la partager.

Les voici:

  • Utiliser grep avec l'option -i:

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

  • traduire les caractères en majuscules ou en minuscules alors grep:

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

  • inclure un jeu de caractères pour chaque caractère dans le modèle (le ci-dessous ne correspondrait bien sûr pas à quelque chose comme "@rOcketmail.com", mais vous avez l'idée de ce que cela deviendrait si je vérifiais chaque caractère pour le cas):

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

37
demandé sur sblack89 2014-04-08 02:49:03

1 réponses

grep -i s'est avéré être significativement plus lent que de traduire en plus bas avant grepping, donc j'ai fini par utiliser une variation de #2.

Merci @mike-w pour me rappeler qu'un simple test va un long chemin.

38
répondu sblack89 2014-04-21 21:36:43