gpt4 book ai didi

linux - 从一个更大的二进制文件中寻找一个大的二进制值

转载 作者:IT王子 更新时间:2023-10-29 00:37:03 25 4
gpt4 key购买 nike

正如标题所暗示的,我想为一个二进制字符串 grep 一个相当大(大约 100MB)的二进制文件——这个二进制字符串不到 5K。

我尝试过使用 -P 选项进行 grep,但这似乎只在模式只有几个字节时才返回匹配项——当我达到大约 100 个字节时,它不再找到任何匹配项。

我也试过 bgrep .这最初工作得很好,但是,当我需要将模式扩展到我现在的长度时,我只会收到“无效/空搜索字符串”错误。

具有讽刺意味的是,在 Windows 中我可以使用 HxD 来搜索文件并在实例中找到它。不过,我真正需要的是 Linux 命令行工具。

谢谢你的帮助,

西蒙

最佳答案

假设我们有几个大的二进制数据文件。对于不应该匹配的大文件,我们创建一个 100MB 的文件,其内容都是 NUL 字节。

dd ibs=1 count=100M if=/dev/zero of=allzero.dat

For the one we want to match, create a hundred random megabytes.

#! /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 选项,但是 grepPATTERN-FILE 的内容解释为换行符分隔的模式,因此在您的 5KB 模式可能包含换行符的情况下,您会遇到编码问题。

所以希望您的系统的 ARG_MAX 足够大,然后努力吧。一定要引用pattern的内容。例如:

$ grep -l --fixed-strings "$(cat pattern)" allzero.dat myfile.datmyfile.dat

关于linux - 从一个更大的二进制文件中寻找一个大的二进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com