То, как вы должны оптимизировать поиск, зависит от того, какой алгоритм использует ваша реализация grep. «Традиционный» алгоритм для egrep заключается в компиляции шаблона в детерминированный конечный автомат. Если вы не знаете, что это такое, не беспокойтесь: важно то, что компиляция занимает некоторое время, но как только это сделано, она выполняется довольно быстро, и ее скорость не зависит от сложности просматриваемого шаблона. за. На самом деле, после компиляции egrep работает быстрее, чем fgrep — это означает, что fgrep быстрее работает с маленькими файлами, а egrep — с большими файлами.
По крайней мере, так обстоит дело с традиционными реализациями [ef]grep. Я думаю, что большинство современных реализаций являются адаптивными и будут переключать алгоритмы в зависимости от ситуации (например, я думаю, что современные fgreps будут переключаться в скомпилированный режим DFA для достаточно больших файлов). Чтобы выяснить, что является самым быстрым для вашей реализации, вам действительно нужно попробовать несколько экспериментов по времени.
Тем не менее, я могу дать вам несколько рекомендаций: во-первых, избегайте запускать поиск более одного раза (например, запускать fgrep для каждого слова), потому что это будет означать многократное сканирование файла. Во-вторых, не беспокойтесь о том, чтобы свести к минимуму количество строк, которые он ищет, потому что, если вы находитесь в наилучшем возможном режиме, это все равно не будет иметь значения. В-третьих, используйте предложение @Lev о -m
, чтобы остановить его после того, как он найдет то, что ему нужно (хотя я почти уверен, что это будет одиночный поиск обоих слов с -m2
).
person
Gordon Davisson
schedule
06.10.2012