1

在 Linux 上的 bash 中,有没有办法更改大文件中的几个字节/字符?例如,寻找 x 的位置,然后选择性地删除一些字符,然后插入一些字符。我更喜欢在 bash 中执行此操作。

4

1 回答 1

2

通常,不可能对更改编辑点之后字符位置的文件进行“编辑”......除非通过读取和重写编辑点之后的所有字符。

其原因是文件表示方式和文件系统 API 工作方式的基础。而这些又源自物理存储设备的工作方式。

因此,需要实现一个通用的解决方案(伪代码):

# Replace N bytes starting at position P with bytes B1, B2,...

open file in "random access, no truncation" mode 
seek to N + P
read remainder of file into a buffer.
seek to N
write bytes B1, B2, ...
write bytes from the buffer
close

(您可以避免将整个“文件的剩余部分”放入缓冲区,但逻辑更复杂。并且与我试图解释的内容相切......)

无论如何,我不知道现有的实用程序可以执行上述操作,但是如果您愿意,您可以编写一个临时程序来执行此操作。


如果您要替换的字节数与替换字节数完全相同,您可以通过就地更新来做到这一点。根据如何用 dd 覆盖二进制文件的某些字节?您可以使用“dd”命令执行此操作。(答案演示了一个 1 字节的就地更新。)

于 2013-04-25T00:45:58.707 回答