使用脚本在二进制文件中查找并覆盖字符串

时间:2019-11-13 16:42:53

标签: bash shell replace binary

二进制文件file.f1

其中包含字符串abc,我想用adcd覆盖它

perl -pi -e s/abc/abcd/ file.f1

可以工作,但是它会插入而不是覆盖它,这会导致使用它的程序出错

我不确定在不使事情变得更复杂的情况下如何能够做到这一点, 我希望它使用sed,grep,python,perl One Liner之类的工具,这些工具在UNIX系统上是默认可用的

我不是非常有经验的用户,并且对这些工具还很陌生

编辑-希望现在可以清除

bin文件中的数据就像

[abc def xyz]

perl -pi -e s/abc/abcd/ file.f1

它变成[abcd def xyz]

我想要的是用一个额外的[空格]覆盖它,使其变为

[abcd ef xyz]

2 个答案:

答案 0 :(得分:0)

您正在尝试patch二进制文件。没有为这种类型的过程设​​置Perl RE。尽管它们将在最长时间内工作,但特定的序列可能会欺骗RE引擎,后者会将文件视为文本。 谨慎使用

要进行替换,请使源字符串与目标字符串的长度匹配

perl -pi -e 's/abc./abcd/' file.f1

Perl将以abcd替换以abc开头的前4个字节的字符串。如果您怀疑第4个字符可能是特殊字符(例如换行符或类似字符),请使用单行模式。它将允许“。”匹配任何字符。

perl -pi -e 's/abc./abcd/s' file.f1

答案 1 :(得分:-2)

perl -pi -e 's/blue/red/g' $file_name

结尾处的g是必需的。将为此类任务使用另一种工具。

Another post about using perl