繁体   English   中英

vim | 从700MB文件中删除前几行

[英]vim | remove first few lines from a 700MB file

如何在不打开主内存中的整个文件的情况下快速从大文件中删除前几行?


UPDATE

我不想将起始x行传输到另一个文件然后剪切前几行,我想更新原始文件。

不完全是vim,但是可以使用前10行的剪切

tail --lines=+10 somefile.txt > newfile.txt
tail -n+11 somefile.txt | vim -

切断前10行并打开文件进行编辑,而不创建临时文件。 请注意,当您以这种方式打开文件时,该文件在vim中没有名称。 这是唯一的缺点。

*请注意,虽然我在命令中使用了11,但是从第11行开始 。因此它会切断前10行。

最初的问题从未真正回答过这里。 我相信这是一个解决方案:

sed -i 's/`head -n 500 foo.txt`//' foo.txt

这将消除文件的前500行,而无需创建临时文件。 (实际上,你可能不得不做头-n 499)我认为它实际上非常有用,例如,清理日志文件,而不仅仅是擦除整个日志。

$ seq 1 502 > foo.txt
$ sed -i 1,500d foo.txt 
$ cat foo.txt 
501
502

vim总是希望/需要读取整个文件,所以没有办法使用(仅)vim。 达卡拉的建议看起来不错。

此过程将始终涉及将除文件的第一部分之外的所有部分复制到另一部分,因此我看不到任何快速执行此操作的方法。

根据您对文件的处理方式,您最好使用sedawk编辑这样一个大文件。

怎么样 ..

  1. 将原始文件分成两部分。 p1 :行0 - x )( p2 :行x+1 - n
  2. 编辑p1因为您要编辑前x行。 我们称之为p1'
  3. 结合p1'p2

简而言之

  1. file - > p1p2
  2. p1 - > p1'
  3. p1' + p2 - > new_file

命令

  1. 使用splitcut

  2. 使用你选择的vim或编辑器。

  3. cat来结合

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM