Moim celem jest dopasowanie adresów e-mail należących do Yahoo! rodzina domen. W systemach * nix (będę używać Ubuntu), jakie są zalety i wady jednej z tych metod do dopasowania wzorca?Jaka jest najbardziej efektywna niewrażliwa na wielkość liter grep?
A jeśli istnieje inne, bardziej eleganckie rozwiązanie, którego nie potrafiłem sobie wyobrazić, podziel się.
Oto one:
- Zastosowanie
grep
z opcją-i
:
grep -Ei "@(yahoo|(y|rocket)mail|geocities)\.com"
- Przekłada znaki wszystkim wielkimi literami lub małymi literami następnie
grep
:
tr [:upper:] [:lower:] < /path/to/file.txt | grep -E "@(yahoo|(y|rocket)mail|geocities)\.com"
- zawierać zestaw znaków dla każdego znaku w strukturze (poniżej nie byłoby oczywiście dopasować coś jak „@ rOcketmail.com”, ale masz pomysł, co stałoby się, gdybym sprawdził każdy znaków dla sprawy):
grep -E "@([yY]ahoo|([yY]|[rR]ocket)[mM]ail|[gG]eo[cC]ities)\.[cC][oO][mM]" /path/to/file.txt
To nie będzie trudne do przetestowania. Próbowałeś tego? –
Czy próbowałeś testów porównawczych? Podejrzewam, że twoja pierwsza próba będzie najszybsza. Spodziewam się, że ten problem jest bardziej prawdopodobny, że jest dławiony przez plik I/O niż szybkość przetwarzania ... ponieważ jest liniowy w rozmiarze wejścia. Uważaj na [mikrooptymalizację] (http://blog.codinghorror.com/the-sad-tragedy-of-micro-optymizacja-theater/). – Floris
Jedną z rzeczy, o których warto pamiętać, jest to, że przechwytywanie grup może być kosztowne. Jeśli nie potrzebujesz zwracać zgrupowanych wartości, rozważ zamiast tego użycie '(? :)'. – CAustin