1

有没有办法指定从命令行读取二进制文件中某个位置/偏移量的文件字节?(即单行)例如

perl -ne <...seek n bytes into file... do stuff...> inputfile

我还没有看到这个,并尝试过使用 seek、sysseek 等。

只是想尝试packunpack通过读取文件中不同偏移量的字节长度。

更新

除了接受的答案之外,我只想添加以下等效答案,但(对我而言)更容易记住+阅读

perl -lne 'BEGIN{$/=undef, $offset=1, $len=2} print unpack("H*", substr($_, $offset, $len))' input

UPDATE2 为了进行 hexdumps 以下工作

perl -0777 -ne '(printf "0x%02x ", $_) for (unpack "C*", substr($_, 0x1, 0x2))' input
4

1 回答 1

1
perl -M5.010 -0777ne'say unpack("N", substr($_, 0x20, 4))' inputfile

您正在使用-n,它将文件的一行读入$_. 二进制文件没有行,所以我们将-0777告诉 Perl 将整个文件视为一行。由于会发生 CRLF 转换,因此在 Windows 中不起作用。


对于实际寻求,

perl -M5.010 -MFcntl=SEEK_SET -e'
   open(my $fh, "<:raw", $ARGV[0]) or die $!; 
   seek($fh, 0x20, SEEK_SET) or die $!;
   local $/ = \4;
   length( my $buf = <$fh> ) == 4 or die "Error";
   say unpack("N", $buf);
' inputfile

如果您希望将所有换行符都放在一行上,则可以删除换行符。

于 2021-08-13T01:49:10.283 回答