Самый эффективный grep метод

Я сказал бы, что это обычно - плохая идея; почти в каждом случае Вы хотите, чтобы Ваши исполняемые файлы имели те же полномочия, которые Вы имеете, так как Вы обычно хотите позволить исполняемому файлу сделать то, что он разработан, чтобы сделать в Ваши файлы. Например, при создании текстового редактора suid непривилегированному пользователю Вы не смогли бы отредактировать любые текстовые файлы...

4
23.10.2012, 12:12
4 ответа

Поместите все те числа в файл, каждого на его собственной строке, затем используйте grep с -f или --file= переключатель:

grep -f filewithcodestosearchfor filetosearchin
2
27.01.2020, 20:56
  • 1
    Хм первые несколько выполнений, это казалось быстрее, но это могло бы быть человеческой интерпретацией. Нужно ко времени выполнения на нем также. Также возможно удалить захваченные строки из файла? –  Jasper 23.10.2012, 12:25
  • 2
    Это на самом деле быстрее или просто более удобно для работы с? –  Marco 23.10.2012, 12:27
  • 3
    @Marco, это было бы быстрее с --fixed-strings иначе -F иначе fgrep –  poige 23.10.2012, 12:31
  • 4
    @poige увеличение производительности прибывает из -F (который не упоминается в этом ответе), и не от -f, право? –  Marco 23.10.2012, 12:36
  • 5
    @Marco, почему я предложил -f должен избежать начального намерения Jasper's использовать несколько grep вызовы, каждый с подмножеством списка кода. grep, особенно GNU grep, сильно в оптимизации, лучше, чтобы просто позволить ему работать вместо того, чтобы кормить его с ложечки. Конечно, @poige -F все еще улучшается много. pastebin.com/P8tTEmie –  manatwork 23.10.2012, 13:06

Вы попытались использовать --mmap флаг?

От человека:

   --mmap If possible, use the mmap(2) system call to read input, instead
          of the default read(2) system call.  In some situations, --mmap
          yields better performance.  However, --mmap can cause undefined
          behavior (including core dumps) if an input file shrinks while
          grep is operating, or if an I/O error occurs.
2
27.01.2020, 20:56

Никакая потребность поместить их в файл, можно сделать:

grep -F '342163477
405760044
149007683
322391022
77409125
195978682
358463993
397650460
171780277
336063797
397650502
357636118
168490006' file

также, который является так же, как портативный/стандартный (как использование grep -Ff, \| в grep BREs не является стандартным/портативным).

Кроме того, каков реальный вопрос? Вы хотите получить строки, которые содержат те числа или знать, какое из тех чисел появляется в файле? Файл отсортирован? Есть ли одно число на строку в файле?...

1
27.01.2020, 20:56

Как poige упоминания в комментарии к другому ответу, использовать grep -F/fgrep если Вы можете. Это рассматривает любые regex символы как литералы. Можно все еще получить эффект чередования путем объединения этого с -f file опция и помещение Ваших шаблонов в файле, одного шаблона к строке.

При необходимости в шаблонах для включения regex, то попытайтесь ограничить себя классиком ДО синтаксис и использование grep -E/egrep. Классик ДО синтаксис не включает обратные ссылки, таким образом, никакие шаблоны формы ...(pat)...\1... Потенциально это может использовать DFA, чтобы выполнить соответствие и быть более эффективным. Но это зависит от Вашей egrep реализации. Больше обсуждения этого здесь. Обратите внимание, что некоторые egrep реализации как Гну примут шаблоны с обратными ссылками; но при соответствии тем шаблонам здесь не будет, конечно, присутствовать преимущество эффективности, упомянутое.

Я упоминаю egrep оптимизация для теоретического интереса, и потому что это стоило бы протестировать, чтобы видеть, помогает ли это в Вашем надлежащем использовании. Я предположил бы, что, поскольку manatwork говорит, grep механизм Гну лучше в выяснении, как оптимизировать, чем Вы.

-1
27.01.2020, 20:56
  • 1
    было уже сказано в существующем ответе, почему создание копирует, только для создания премий? Это является комковатым. –  poige 23.10.2012, 14:27

Теги

Похожие вопросы