在 Linux 中删除文件的最后 N 行
简介
有时您可能需要删除 Linux 文件的最后几行。例如,您可能有一个不断添加的日志文件,并且只想保留最新的条目。在本教程中,我们将探讨在 Linux 上删除文件最后 N 行的几种不同方法。
使用 head 和 tail 命令
head 和 tail 命令是两个非常有用的实用程序,分别用于显示文件的开头和结尾。通过组合这些命令,我们可以轻松删除文件的最后 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 选项用于修改文件,这意味着修改后的文件将保存在与原始文件相同的位置。
:a 和 ba 命令用于在 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 行的三种不同方法。每种方法都有其优点和缺点,因此您可以选择最适合您需求的方法。无论您使用 head 和 tail 命令、sed 命令还是 tac 命令,您现在都应该拥有在 Linux 上删除文件最后 N 行所需的工具。