删除大文本文件的前 n 行

Koh*_*ese 83 command-line

我需要删除 2GB SQL 转储的前 42 行。

我知道我可以使用以下方法查看第一行:

head -n 44 dump.sql
Run Code Online (Sandbox Code Playgroud)

但是有没有办法编辑或删除它们?

ste*_*ver 127

如果您只想查看第 43 行开始的行,您可以使用

tail -n +43 dump.sql
Run Code Online (Sandbox Code Playgroud)

+标志很重要 - 没有它,tail将改为打印最后43 行。或者使用“sed”

sed 1,42d dump.sql
Run Code Online (Sandbox Code Playgroud)

如果您想真正从原始文件中删除前 42 行,那么您可以使用 sed-i选项进行原地更改

sed -i 1,42d dump.sql
Run Code Online (Sandbox Code Playgroud)

  • 如果设备上没有剩余空间怎么办?`sed -i 1,50000000d 17GigFile` 创建一个临时文件 `sedXYZ`,消耗更多 GB。有没有没有临时文件的方法? (8认同)

Koh*_*ese 24

这似乎是最简单的:

sed '1,42d' test.sql > test2.sql
Run Code Online (Sandbox Code Playgroud)

从 test.sql 中删除第 1-42 行并另存为 test2.sql

  • 如果您不需要保留原始文件,则较短的将是 **sed -i '1,42d' test.sql**。 (10认同)

小智 11

尝试这个,

tail -n +43 dump.sql > dump_new.sql


Ste*_*nny 6

你可以在 Ex 模式下使用 Vim:

ex -s -c '1d42|x' dump.sql
Run Code Online (Sandbox Code Playgroud)
  1. 1 移至第一行

  2. 42 选择 42 行

  3. d 删除

  4. x 保存并关闭

  • 它会创建一个临时文件吗?当设备上的剩余空间小于文件大小时,是否可以执行此操作? (3认同)
  • @juanmf 所有这些解决方案都需要一个临时文件。只能在不使用临时文件的情况下从文件的末尾删除数据。 (3认同)
  • @PerlDuck您能否详细说明为什么(或链接资源)“只能在不使用临时文件的情况下从文件末尾删除数据”? (2认同)