在 Linux 中删除文件的最后 N 行


简介

有时您可能需要删除 Linux 文件的最后几行。例如,您可能有一个不断添加的日志文件,并且只想保留最新的条目。在本教程中,我们将探讨在 Linux 上删除文件最后 N 行的几种不同方法。

使用 head 和 tail 命令

headtail 命令是两个非常有用的实用程序,分别用于显示文件的开头和结尾。通过组合这些命令,我们可以轻松删除文件的最后 N 行。

要删除文件的最后“N”行,我们可以使用以下命令:

$ head -n -N file.txt > temp && mv temp file.txt

让我们分析一下这个命令:

  • “head” 命令用于查看文件的开头。-n 选项用于指定要显示的行数,-N 选项用于指定要从文件末尾跳过的行数。

  • > 运算符用于将 head 命令的输出重定向到一个名为 temp 的新文件。

  • && 运算符用于连接多个命令。在本例中,它用于将临时文件移动到原始文件的位置,并覆盖它。

以下是在实践中使用此命令的示例:

$ head -n -7 file.txt > temp && mv temp file.txt

此命令将删除 file.txt 文件的最后 7 行,并将编辑后的文件保存到相同位置。

使用 sed 命令

删除文件最后 N 行的另一个选择是使用 sed 命令。sed 命令是一个功能强大的文本处理实用程序,可用于执行各种任务,包括从文件中删除行。

要使用 sed 删除文件的最后 N 行,我们可以使用以下命令:

$ sed -i ':a;$q;N;$d;ba' file.txt

此命令乍一看可能令人生畏,但一旦分解它实际上非常简单。

  • 相反,-i 选项用于修改文件,这意味着修改后的文件将保存在与原始文件相同的位置。

  • :aba 命令用于在 sed 中创建循环。

  • $q 命令用于在到达文件末尾时退出循环。

  • N 命令用于将下一行添加到模式空间。

  • $d 命令用于从模式中删除空格,该模式包含文件的最后 N 行。

以下是在实践中使用此命令的示例:

$ sed -i ':a;$q;N;$d;ba' file.txt

此命令将删除 file.txt 文件的最后一行,并将编辑后的文件保存到相同位置。

使用 tac 命令

删除文件最后 N 行的另一个选择是使用 tac 命令。tac 命令用于反向连接和打印文件,这对于删除文件的最后 N 行很有用。

要使用 tac 删除文件的最后 N 行,我们可以使用以下命令:

$ file tac.txt | head -n -N > temp && mv temp file.txt

让我们分析一下这个命令:

  • tac 命令用于反向连接和打印文件 file.txt

  • head 命令用于查看反转文件的开头。-n 选项用于指定要显示的行数,-N 选项用于指定要从文件末尾跳过的行数。

  • > 运算符用于将 head 命令的输出重定向到一个名为 temp 的新文件。

  • && 运算符用于连接多个命令。在本例中,它用于将临时文件移动到原始文件的位置,并覆盖它。

以下是在实践中使用此命令的示例:

$ tac.txt file | head -n -3 > temp && mv temp file.txt

此命令将删除 file.txt 文件的最后 3 行,并将编辑后的文件保存到相同位置。

结论

在本教程中,我们探讨了在 Linux 上删除文件最后 N 行的三种不同方法。每种方法都有其优点和缺点,因此您可以选择最适合您需求的方法。无论您使用 headtail 命令、sed 命令还是 tac 命令,您现在都应该拥有在 Linux 上删除文件最后 N 行所需的工具。

更新于: 2023年1月25日

10K+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告