加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 从更大的二进制文件中获取大二进制值

发布时间:2020-12-13 22:47:17 所属栏目:Linux 来源:网络整理
导读:正如标题所示,我想要一个相当大(约100MB)的二进制文件,对于二进制字符串 – 这个二进制字符串不到5K. 我已经使用-P选项尝试了grep,但是当模式只有几个字节时,这似乎只返回匹配 – 当我达到大约100个字节时,它不再找到任何匹配. 我也尝试过bgrep.但是,当我需
正如标题所示,我想要一个相当大(约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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读