二进制文件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]
答案 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)