【发布时间】:2015-06-09 08:48:53
【问题描述】:
我有一个 23GB 的文件,我想编辑第 23 行,但我在服务器上只有 200 MB 可用 RAM。我不想完全打开文件,因为我只剩下 20GB 可用磁盘空间。
我该怎么做。我尝试使用 head,tail sed,但它似乎创建了一个临时文件。没有临时文件可以吗?
【问题讨论】:
-
它从一个文件读取,写入另一个文件,然后删除原始文件(除非被指示保留备份)并将新文件重命名为旧名称。
-
也许你可以从 here 改编这个技巧,就像在
sed '23s/foo/bar/' filename | dd of=filename conv=notrunc中一样(如果结果文件更短,然后截断到新的长度)。 在将其用于实时数据之前对其进行测试。你有备份,对吧?对吧?! -
你租了一个虚拟机,把23GB的文件复制到里面,编辑,检查,删除原来的,然后把编辑好的文件复制回原来的位置。或者,您可以购买更多存储硬件。
-
@josifoski a quit 将停止输出 23 之后的行,因此,新文件最后只有 23 行,在这种情况下不是一个选项
-
嗯...想一想,如果转换使文件变大,
dd技巧是否会改变工作方式?另一个想法:压缩文件,然后zcat通过sed,即gzip file; zcat file.gz | sed '23s/foo/bar/' > file。你可能有足够的空间放那个左边。