正如标题所示,我想要一个相当大(约100MB)的二进制文件,对于二进制字符串 – 这个二进制字符串不到5K.
我已经使用-P选项尝试了grep,但是当模式只有几个字节时,这似乎只返回匹配 – 当我达到大约100个字节时,它不再找到任何匹配.
我也尝试过bgrep.但是,当我需要将模式扩展到我现在的长度时,我只是得到“无效/空搜索字符串”错误.
具有讽刺意味的是,在Windows中,我可以使用HxD来搜索文件,然后在实例中找到它.我真正需要的是一个Linux命令行工具.
谢谢你的帮助,
西蒙
最佳答案 假设我们有几个大的二进制数据文件.对于一个不匹配的大文件,我们创建一个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足够大并且适合它.一定要引用模式的内容.例如:
$grep -l --fixed-strings "$(cat pattern)" allzero.dat myfile.dat myfile.dat