web-dev-qa-db-fra.com

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

Mon objectif est de faire correspondre les adresses e-mail appartenant à Yahoo! famille de domaines. Dans les systèmes * nix (j'utiliserai 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 pu imaginer, partagez-la.

Les voici:

  • Utilisez grep avec l'option -i:

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

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

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

  • Incluez 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 une idée de ce que cela deviendrait si je vérifiais chaque caractère pour la casse):

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

37
sblack89

grep -i s'est avéré être beaucoup plus lent que la traduction en abaissements avant le grepping, j'ai donc fini par utiliser une variante de # 2.

Merci @ mike-w de me rappeler qu'un simple test va très loin.

39
sblack89