我正在尝试替换大型日志文件的特定行上的少量文本(总计~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