假設我們有幾個大的二進制數據文件。對於一個不匹配的大文件,我們創建一個100MB的文件,其內容都是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的內容換行分隔的格局,所以在您5KB模式包含換行符可能的情況下,你會打的編碼問題。
所以,希望你的系統的ARG_MAX
足夠大,併爲此付出。請務必引用pattern
的內容。例如:
$ grep -l --fixed-strings "$(cat pattern)" allzero.dat myfile.dat
myfile.dat
我們確實需要更多關於搜索模式的信息。請注意,perl -P需要Perl風格的正則表達式。那真的是你想要的嗎? AFAICT HxD根本不支持正則表達式... – sehe
不是。 -P只是我過去使用grep來爲我找到二進制匹配的東西。我根本不在乎reg-ex。我只需要在多個文件中尋找一個大的靜態二進制模式。 – Simon