我试图在二进制文件中进行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/