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

时间:2012-04-11 15:39:57

标签: linux unix sed large-files file-manipulation

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

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

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

上面的命令工作正常,但sed(和perl)的就地编辑会创建一个临时文件,但成本很高。

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

2 个答案:

答案 0 :(得分: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字节文件编码。

答案 1 :(得分:0)

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

ex log_file << 'END_OF_COMMANDS'
20000000s/.\{5\}$/zzzzz/
w
q
END_OF_COMMANDS
相关问题