perl - 二进制sed替换

标签 perl binary sed hex replace

我试图在二进制文件中进行sed替换,但是我开始认为这是不可能的。从本质上讲,我想做的事情类似于以下内容:

sed -bi "s/\(\xFF\xD8[[:xdigit:]]\{1,\}\xFF\xD9\)/\1/" file.jpg


我希望实现的逻辑是:扫描二进制文件,直到十六进制代码FFD8,继续读取直到FFD9,并仅保存它们之间的内容(在处理之前和之后丢弃垃圾,但包括FFD8和< cc>作为文件的保存部分)

有什么好方法吗?即使不使用FFD9

编辑:我只是在玩耍,发现做IMO的最干净的方法。我知道此grep语句会表现得很贪心。

hexdump -ve '1/1 "%.2x"' dirty.jpg | grep -o "ffd8.*ffd9" | xxd -r -p > clean.jpg

最佳答案

bbe是“用于二进制文件的文件”,对于大型二进制文件,它应比十六进制转储/重构更有效。

其用法示例:

$ bbe -e 's/original/replaced/' infile > outfile


有关man page的更多信息。

关于perl - 二进制sed替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2604964/

相关文章:

c# - ascii byte[] 和 int 之间直接转换

ios - 应用内购买包装

regex - 正则表达式替换以构建文件中的版本

perl - 有没有办法做到 "reverse".=?

regex - Perl RegEx 非捕获组在组内具有替代捕获

无法打印二进制计算

linux - csv文件用三个字符替换两个字符串

sed - 破译这个 sed one-liner

perl - 如何在 Perl 中的不同包之间共享全局值?

javascript - 用户定义的正则表达式安全问题