【发布时间】:2020-03-09 12:33:00
【问题描述】:
二进制文件file.f1
其中有字符串abc我想用adcd覆盖它
perl -pi -e s/abc/abcd/ file.f1
有效,但它插入而不是覆盖它,这会导致使用它的程序出错
我不确定如何在不让事情变得更复杂的情况下做到这一点, 我更喜欢它使用 sed、grep、python、perl 等工具,这些工具在 UNIX 系统上默认可用
我不是很有经验的用户,对这些工具很陌生
编辑-希望现在清楚
bin文件里面的数据是这样的
[abc def xyz]
在做perl -pi -e s/abc/abcd/ file.f1时
它变成 [abcd def xyz]
我想要的是用额外的[空格]覆盖它,这样它就变成了
[abcd ef xyz]
【问题讨论】:
-
这取决于它是什么类型的二进制文件。二进制文件通常非常严格。没有通用的答案。添加或删除字节可能是一个非首发。
-
您不想更改二进制文件中的字节。至少您不想更改文件的长度。二进制文件通常在文件的字节中编码长度、类型等。将
abc更改为abcd,其中'd'最初用作2137 元素数组中的元素数——这将导致读取该文件的代码出现真正的问题。在进行任何更改之前,您必须知道文件的使用方式。 -
我可以使用具有“覆盖模式”的 gui 十六进制编辑器应用程序来做同样的事情,但我想创建一个脚本来自动化相同的过程
-
@DavidRankin-ReinstateMonica 我明白了,因为我已经在十六进制编辑器中修改了文件,我知道如果 abcd 被覆盖它会导致下一个字符串重叠,这很好,因为值用空格分隔,假设有 [abc def] 所以我可以添加 'abcd+[space]' 这将导致 [abcd ef] 和 'def' 之后的值对程序并不重要
-
您是否有机会共享示例输入文件(可能只有几行十六进制格式)?这将使提供解决方案变得更加容易。