替换大文件中固定数量的文本



我正在尝试替换大型日志文件的特定行上的少量文本(总计~40密耳行):

sed -i '20000000s/.{5}$/zzzzz/' log_file

这样做的目的是用预期的唯一字符串"标记"一行,以供以后测试。

上面的命令工作正常,但是就地编辑sed(和perl)会创建一个临时文件,这是昂贵的。

有没有办法替换文件中固定数量的字符(即 5 个其他字符),而无需创建临时文件或非常大的缓冲区,这最终会成为临时文件本身。

您可以使用

dd替换一些字节:

dd if=/dev/zero of=path/to/file bs=1 count=10 conv=notrunc skip=1000

将在 1000 个字节后写入 10 个零 (0x00)。您可以将要替换的任何内容放入文件中,并将路径写入 if 参数中。然后,您必须将替换文件的大小插入count参数中,以便读取整个文件。

conv=notrunc 参数告诉dd不要截断文件的末尾。

这应该适用于任何 1 字节文件编码。

ex是一个可编写脚本的文件编辑器,因此它将就地工作:

ex log_file << 'END_OF_COMMANDS'
20000000s/.{5}$/zzzzz/
w
q
END_OF_COMMANDS

相关内容

  • 没有找到相关文章

最新更新