Как трябва да оптимизирате търсенето зависи от това какъв алгоритъм използва вашата реализация на grep. „Традиционният“ алгоритъм за egrep е да компилира модела в детерминиран краен автомат. Ако не знаете какво е това, не се притеснявайте: важното е, че компилирането отнема малко време, но след като това стане, става доста бързо и скоростта му не зависи от сложността на модела, който търси за. Всъщност, след като компилацията е направена, egrep всъщност е по-бърз от fgrep -- което означава, че fgrep е най-бърз при малки файлове, egrep е най-бърз при големи файлове.
Поне това е ситуацията за традиционните реализации на [ef]grep. Мисля, че повечето съвременни реализации са адаптивни и ще превключват алгоритмите в зависимост от ситуацията (напр. Мисля, че съвременните fgreps ще превключват в режим на компилиран DFA за достатъчно големи файлове). За да разберете кое е най-бързото за вашето внедряване(ия), наистина трябва да опитате някои времеви експерименти.
Мога обаче да ви дам няколко препоръки: Първо, избягвайте да изпълнявате търсенето повече от веднъж (напр. да изпълнявате fgrep за всяка дума), защото това ще означава сканиране на файла многократно. Второ, не се притеснявайте да минимизирате броя низове, които търси, защото ако сте в най-добрия възможен режим, това така или иначе няма да има значение. Трето, използвайте предложението на @Lev за -m
, за да го накарате да спре, след като намери това, от което се нуждае (въпреки че съм почти сигурен, че това ще бъде единично търсене и за двете думи с -m2
).
person
Gordon Davisson
schedule
06.10.2012