在本文中,我们将讨论在 Linux 中删除文件最后 N 行的多种方法。为此,我们将使用各种 Linux 实用程序,例如 sed、awk 和 head。
在我们继续之前,重要的是要提到,如果操作不当,直接在 Linux 系统上操作文件可能会造成破坏。在执行这些操作之前,请务必确保您已备份文件,尤其是当文件包含重要数据时。
1.使用head命令
Linux中的head命令用于打印顶部N 给定输入的数据数量。默认情况下,它打印指定文件的前 10 行。如果提供了多个文件名,则它会打印每个文件的前 10 行,前面是文件名。
您可以使用 head 命令通过打印除最后 N 行之外的所有行来删除文件中的最后 N 行,如下所示:
Where ‘N’是要从末尾删除的行数。这是一个例子:
head -n -10 myfile.txt
该命令将打印所有行‘myfile.txt’除了最后 10 个。但是,要将更改写入文件,您需要将输出重定向回文件:
head -n -10 myfile.txt > temp.txt && mv temp.txt myfile.txt
此命令将输出写入临时文件,然后用临时文件替换原始文件。
2.使用sed命令
sed 是 Stream Editor 的缩写,是一个功能强大的命令行实用程序,用于解析和转换文本。处理文本文件时特别方便。
删除最后一个‘N’使用 sed 来查看文件的行,可以使用以下命令:
Where ‘N’是距离末尾的行数。这是一个例子:
sed -i '$10,$d' myfile.txt
此命令将删除最后 10 行‘myfile.txt’. The ‘-i’选项告诉 sed 就地编辑文件(即保存对原始文件的更改)。
3.使用awk命令
awk 是 Unix/Linux 中另一个强大的命令行工具。它是一个出色的过滤器和报告编写器。很多时候,当 sed 或 grep 不足以处理文本时使用它,主要是在处理数据的列或字段时。
以下是如何使用 awk 删除文件中的最后 N 行:
|
awk -v n=N 'NR>n{打印a[NR%n]} {a[NR%n]=$0}' filename
|
Where ‘N’是要从末尾删除的行数。这是一个例子:
awk -v n=10 'NR>n{print a[NR%n]} {a[NR%n]=$0}' myfile.txt
此命令将打印“myfile.txt”中除最后 10 行之外的所有行。与 head 命令类似,要将更改写回到文件中,您需要使用重定向:
awk -v n=10 'NR>n{print a[NR%n]} {a[NR%n]=$0}' myfile.txt > temp.txt && mv temp.txt myfile.txt
此命令将输出写入临时文件,然后用临时文件替换原始文件。
结论
正如您所看到的,有多种方法可以在 Linux 中删除文件的最后 N 行。根据您的具体需求和任务的复杂性,您可以选择最适合您的一种。请记住,虽然这些操作非常有用,但如果操作不当,也可能具有破坏性,因此在执行这些操作之前,请务必确保您有数据备份。
如果您发现很难记住这些命令,您可以编写一个执行这些操作的脚本,并在需要从文件中删除最后 N 行时调用该脚本。这样,您只需要记住如何调用脚本,而不需要记住具体使用的命令。