Скажем, у нас есть пара больших двоичных файлов данных.Для большого файла, который не должен совпадать, мы создаем файл размером 100 МБ, содержимое которого содержит все байты NUL.
dd ibs=1 count=100M if=/dev/zero of=allzero.dat
Для файла, который мы хотим сопоставить, создайте сто случайных мегабайт.
#! /usr/bin/env perl
use warnings;
binmode STDOUT or die "$0: binmode: $!";
for (1 .. 100 * 1024 * 1024) {
print chr rand 256;
}
Выполните его как ./mkrand >myfile.dat
.
Наконец, извлеките известное совпадение в файл с именем pattern
.
dd skip=42 count=10 if=myfile.dat of=pattern
Я предполагаю, что вам нужны только совпадающие файлы (-l
) и хотите, чтобы ваш шаблон обрабатывался буквально (-F
или --fixed-strings
).Я подозреваю, что у вас может быть ограничение длины с -P
.
У вас может возникнуть желание использовать опцию --file=PATTERN-FILE
, но grep
интерпретирует содержимое PATTERN-FILE как шаблоны, разделенные символом новой строки, так что в вероятном случае, когда ваш шаблон размером 5 КБ содержит символы новой строки, вы столкнетесь с проблемой кодирования.
Так что надеюсь, что ARG_MAX
вашей системы достаточно велик и продолжайте.Обязательно процитируйте содержание pattern
.Например:
$ grep -l --fixed-strings "$(cat pattern)" allzero.dat myfile.dat
myfile.dat