sed替换二进制

sed是流编辑器, 既可以是字符流也可以是二进制流,可以针对文本字符或二进制字符进行修改替换,可以直接修改二进制文件。感谢 multiple1902 提醒。
$ sed 's/\x0D\x4D\x53\x48/\x0D\x0A\x4D\x53\x48/g' binfile > new_binfile

我一般用sed以“迂回”方式修改二进制文件,直观些,不容易出错:
举一个非常典型实用的sed修改二进制文件的应用场景:
Oracle 10g的表导出dmp文件是一种二进制文件,经常需要在字符集“US7ASCII”和“ZHS16GBK”转换,需要将US7ASCII字符集dmp文件的“0001”字符集特征码改为ZHS16GBK字符集dmp文件的“0354”字符集特征码,以下命令就可以用sed修改转换:
$ hexdump -ve '1/1 "%.2x"' ora10g_mytab_us7ascii.dmp | sed "s/0001000107d00001/0001035407d00001/" |xxd -r -p > ora10g_mytab_zhs16gbk.dmp
hexdump命令的作用是:将二进制文件转换为文本dump文件
sed命令的作用是:将特征码修改替换
xxd命令的作用是:将文本dump文件转换为二进制文件

通过hexdump、sed、xxd命令管道组合,可以修改任何二进制文件,你想怎么改就怎么改,怎么样,威力大吗?尤其是多个的二进制文件大批量修改,效率极高,不需要另编处理程序,也不需要使用低效的二进制文件编辑器。
sed乍一看好像除了能替换字符其它啥也干不了,其实威力大着呢。大批量转换情况下,为提高性能,还可以直接修改二进制文件:
$ sed -i "s/\x00\x01\x00\x01\x07\xd0\x00\x01/\x00\x01\x03\x54\x07\xd0\x00\x01/" ora10g_mytab_us7ascii.dmp 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值