二进制sed替换

Rya*_*yan 13 binary perl hex replace sed

我试图sed在二进制文件中进行替换,但我开始相信这是不可能的.基本上我想做的是类似于以下内容:

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

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

有没有办法做到这一点?即使不使用sed

编辑: 我只是在玩,并找到了最干净的方式去做IMO.我知道这个grep声明会贪婪.

hexdump -ve '1/1 "%.2x"' dirty.jpg | grep -o "ffd8.*ffd9" | xxd -r -p > clean.jpg
Run Code Online (Sandbox Code Playgroud)

Iva*_*sov 11

bbe是"sed for binary files",对于大型二进制文件而言应该比hexdumping/reconstruct更有效.

它的一个例子:

$ bbe -e 's/original/replaced/' infile > outfile
Run Code Online (Sandbox Code Playgroud)

有关手册页的更多信息.


小智 9

老问题,但是,

xxd infile | sed 's/xxxx xxxx/yyyy yyyy/' | xxd -r > outfile
Run Code Online (Sandbox Code Playgroud)

可能是最简单、最可靠的解决方案。与OP中的编辑类似。

  • 如果 `xxxx xxxx` 跨越换行符,这不会失败吗? (8认同)