如何在不打开主内存中的整个文件的情况下快速从大文件中删除前几行?
我不想将起始x
行管道传输到另一个文件然后剪切前几行,我想更新原始文件。
答案 0 :(得分:6)
不完全是vim,但要剪切前10行你可以使用
tail --lines=+10 somefile.txt > newfile.txt
答案 1 :(得分:3)
tail -n+11 somefile.txt | vim -
要切断前10行并打开文件进行编辑,而不创建临时文件。请注意,当您以这种方式打开文件时,该文件在vim中没有名称。这是唯一的缺点。
*请注意,虽然我在命令中使用了11,但从第11行开始。因此它会切断前10行。
答案 2 :(得分:3)
原始问题在这里从未真正回答过。我相信这是一个解决方案:
sed -i 's/`head -n 500 foo.txt`//' foo.txt
这将消除文件的前500行,而无需创建临时文件。 (实际上,你可能不得不做头-n 499)我认为它实际上非常有用,例如,清理日志文件,而不只是删除整个日志。
答案 3 :(得分:1)
$ seq 1 502 > foo.txt
$ sed -i 1,500d foo.txt
$ cat foo.txt
501
502
答案 4 :(得分:0)
vim总是希望/需要读取整个文件,所以没有办法使用(仅)vim。达卡拉的建议看起来不错。
此过程将始终涉及将除文件的第一部分之外的所有部分复制到另一部分,因此我认为没有任何方法可以快速完成。
答案 5 :(得分:0)
根据您对文件的处理方式,您最好使用sed
或awk
来编辑这样一个大文件。
答案 6 :(得分:0)
怎么样..
p1
:第0行 - x
)(p2
:行x+1
- n
)p1
,因为您要编辑第一条x
行。我们称之为p1'
p1'
和p2
简而言之
file
- > p1
和p2
p1
- > p1'
p1'
+ p2
- > new_file
<强>命令强>
使用split
或cut
使用vim
或您选择的编辑。
使用cat
合并