1

我正在尝试替换大型日志文件的特定行上的少量文本(总共约 40 百万行):

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

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

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

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

4

2 回答 2

3

您可以使用dd来替换一些字节:

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

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

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

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

于 2012-04-11T15:48:41.783 回答
0

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

ex log_file << 'END_OF_COMMANDS'
20000000s/.\{5\}$/zzzzz/
w
q
END_OF_COMMANDS
于 2012-04-11T15:50:33.607 回答