Il mio obiettivo è abbinare gli indirizzi email che appartengono a Yahoo! famiglia di domini. Nei sistemi * nix (userò Ubuntu), quali sono i vantaggi e gli svantaggi di uno qualsiasi di questi metodi per la corrispondenza del modello?Qual è l'utilizzo di grep senza distinzione tra maiuscole e minuscole?
E se c'è un'altra soluzione più elegante che non sono stato in grado di immaginare, per favore condividi.
Eccoli:
- Usa
grep
con l'opzione-i
:
grep -Ei "@(yahoo|(y|rocket)mail|geocities)\.com"
- converte i caratteri in lettere maiuscole o minuscole poi
grep
:
tr [:upper:] [:lower:] < /path/to/file.txt | grep -E "@(yahoo|(y|rocket)mail|geocities)\.com"
- Includere un set di caratteri per ogni carattere nel modello (il seguito sarebbe ovviamente non corrisponde qualcosa come "@ rOcketmail.com", ma si ottiene l'idea di quello che sarebbe diventato se ho controllato ogni carattere per caso):
grep -E "@([yY]ahoo|([yY]|[rR]ocket)[mM]ail|[gG]eo[cC]ities)\.[cC][oO][mM]" /path/to/file.txt
Questo non sarebbe difficile da testare. L'hai provato? –
Hai provato il benchmarking? Sospetto che il tuo primo campione sarà il più veloce. Mi aspetto che questo problema sia più probabile che venga limitato dal file I/O rispetto alla velocità di elaborazione ... poiché è lineare nella dimensione dell'input. Attenzione [micro-ottimizzazione] (http://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/). – Floris
Una cosa che dovresti tenere a mente è che catturare gruppi può essere costoso. Se non è necessario restituire i valori raggruppati, prendere in considerazione l'uso di '(? :)' invece. – CAustin