显示文件中从某一行开始之后的所有行

在 Linux 中,如果想要显示一个大文件中从某一行开始之后的所有行,可以使用多种命令来实现。以下是几种常见的方法:

使用 sed 命令

sed 是一个流编辑器,它可以在不加载整个文件到内存的情况下处理文本。你可以用它来打印出从特定行号开始的所有行。

sed -n 'N,$p' filename

N 替换为要开始的行号,filename 替换为具体的文件名。-n 选项抑制自动打印模式空间的内容,'N,$p' 指定了一个地址范围,表示从第 N 行到文件的最后一行($),并打印这些行。

⊙使用 tail 命令

如果你知道要从哪一行开始,但不知道这一行之前的行数,可以先使用 headawk 找到该行的行号,然后结合 tail 来输出从那一行开始的所有内容。例如,如果要从第 1000 行开始显示所有行,可以这样做:

tail -n +1000 filename

+1000 表示从文件的第 1000 行开始读取直到文件末尾。这与 -1000 意思是不同的,tail -1000 或者 tail -n 1000 或者 tail -n -1000 这三个都是等效的,都是表示取最后1000行打印出来。另外需要注意不支持 tail +1000 这种写法,需要使用完整的参数形式 tail -n +1000 。

使用 awk 命令

awk 是一个强大的文本处理工具,也可以用来完成这个任务:

awk 'NR >= N' filename

这里 NRawk 内置变量,代表当前处理的行号。N 同样是想要开始的行号。

使用 perl 命令

Perl 也是一种选择,几乎所有linux都内置Perl:

perl -ne 'print if $. >= N' filename

$. 是 Perl 的特殊变量,表示当前行号。传参 -n 很重要,这个选项告诉 Perl 对输入文件的每一行都执行给定的代码块,它相当于在你的代码周围添加了一个隐式的循环,类似于 while (<>) { … }。这使得你可以逐行处理文件,而不需要显式地写一个读取文件的循环。-e 就是命令行代码执行了。

额外扩展一个特殊变量 $_ : 表示当前行的内容,在 Perl 中,$_ 是默认变量,当没有明确指定变量时,许多操作都会默认作用于 $_。现在我们换一种写法:

perl -ne 'print "$_" if $. >= N' filename

这是等效的。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注