【发布时间】:2016-01-21 10:33:09
【问题描述】:
我需要从 bash 脚本修改存储在磁盘中的二进制文件的数据。如何做到这一点?
(例如,我需要打开一个100字节大小的文件,并将第50字节位置的数据0x00替换为0xff)
我尝试了谷歌,但无法找到答案。任何帮助表示赞赏。
谢谢。
【问题讨论】:
标签: bash
我需要从 bash 脚本修改存储在磁盘中的二进制文件的数据。如何做到这一点?
(例如,我需要打开一个100字节大小的文件,并将第50字节位置的数据0x00替换为0xff)
我尝试了谷歌,但无法找到答案。任何帮助表示赞赏。
谢谢。
【问题讨论】:
标签: bash
Perl 的救援:
#!/usr/bin/perl
use warnings;
use strict;
use Fcntl qw{ SEEK_SET SEEK_CUR };
my $pos = 50;
open my $BIN, '+<:raw', shift or die $!;
seek $BIN, $pos - 1, SEEK_SET or die "Can't seek into file.\n";
my $size = read $BIN, my $data, 1;
die "Can't read 50th byte from file.\n" unless $size;
if ("\0" eq $data) {
seek $BIN, - 1, SEEK_CUR;
print {$BIN} "\xff";
close $BIN;
} else {
warn "Nothing to replace, 50th byte isn't a zero.\n";
}
+< 以读/写模式打开文件。:raw 删除任何 IO 层(例如 CRLF 转换)seek 回退文件句柄中的位置。【讨论】: