替换一个大文件
我试图在一个大的日志文件的特定行替换文本少量(总共〜40条密耳的线)的文本固定量:替换一个大文件
sed -i '20000000s/.\{5\}$/zzzzz/' log_file
的目的这是用预期的唯一字符串“标记”一行,以便以后进行测试。
上述命令可以正常工作,但就地编辑sed
(和perl
)会创建一个临时文件,其代价很高。
有没有办法在文件中替换固定数量的字符(即5个字符和5个其他字符),而无需创建一个临时文件或一个非常大的缓冲区,该缓冲区会自动成为临时文件。
你可以使用dd
替换一些字节的地方:
dd if=/dev/zero of=path/to/file bs=1 count=10 conv=notrunc skip=1000
会写1000个字节后10个零(0×00)。您可以将任何要替换的文件放入文件中,并在if
参数中写入路径。然后,您必须将替换文件的大小插入count
参数,以便读取整个文件。
conv=notrunc
参数告诉dd
使文件的末尾不被截断。
这应该适用于任何1字节的文件编码。
谢谢,我没有想到用这个'dd'。但是这种方法的工作原理是设置跳过的字节数,而不是行。 – Alex 2012-04-11 16:54:46
你可以使用'head'和'wc'(以及一些算术)来计算字节偏移量 – 2012-04-11 18:12:59
刚刚拆分日志文件(按天,周,月,年,十年,百年,严重程度,任务或其他) – KurzedMetal 2012-04-11 15:46:05