替换最后一次出现的 HEX 文件 - Perl Regex

Replace last occurrence of an HEX file - Perl Regex

我正在 bash 中构建一个编辑二进制文件的脚本。我管理如何实现第一次出现替换和所有出现替换但我无法管理如何替换最后一次出现。

脚本必须用 F0 替换 F8 字节。

这是 ALL 和 FIRST 的代码:

全部

perl -pe 's/\x{F8}/\x{F0}/g' < CS.midi > CSnew.midi 

第一个

perl -pe 's/\x{F8}/\x{F0}/' < CS.midi > CSnew.midi 

对于替换最后一次出现的 F8 有什么建议吗?

首先,您更改第一个代码是不正确的。您一次读取一行文件,它会更改每行的第一个 。这意味着改变第一个,以及每个 LF (0x0A) 之后的第一个。

-0777 将导致整个文件被视为一行。

perl -0777pe's/\xF8/\xF0/g'        # All
perl -0777pe's/\xF8/\xF0/'         # First
perl -0777pe's/^.*\K\xF8/\xF0/s'   # Last

甚至不需要使用正则表达式:

perl -0777 -pe 'substr $_, rindex($_, "\xF8"), 1, "\xF0"' CS.midi > CSnew.midi

读取整个文件,并替换最后出现的匹配字节。