打印没有第一行和最后一行的文件内容

use*_*394 69 text-processing

有没有一种简单的方法可以回显文件,跳过第一行和最后一行?我正在考虑从headinto管道tail,但对于那些似乎我必须从一开始就知道总行数。我也在看split,但我也没有看到这样做的方法。

Gil*_*not 120

只是有sed,没有任何管道:

sed '1d;$d' file.txt
Run Code Online (Sandbox Code Playgroud)

笔记

  • 1平均第一行
  • d意思是删除
  • ; 是 2 个命令的分隔符
  • $意思是最后一行


Ola*_*che 49

您不需要提前知道行数。tail并且head可以分别从文件的开头或结尾取一个偏移量。

该管道从文件的第二行开始(跳过第一行)并在最后一行停止(跳过最后一行)。要在开头或结尾跳过多于一行,请相应地调整数字。

tail -n +2 file.txt | head -n -1
Run Code Online (Sandbox Code Playgroud)

反过来做,当然也是一样的:

head -n -1 file.txt | tail -n +2
Run Code Online (Sandbox Code Playgroud)


roo*_*ook 11

以下是如何做到这一点awk

awk 'NR>2 {print t} {t=$0}'
Run Code Online (Sandbox Code Playgroud)

还有另一种方式sed

sed '1d;x' file.txt
Run Code Online (Sandbox Code Playgroud)

x是高级sed命令,它将当前行与前一行切换:当前行进入缓冲区,前sed一行进入屏幕等等,同时逐行处理流(这就是为什么第一行是空白的原因)。

awk每个步骤(行)上的解决方案将当前行放入变量中,并仅在第二行经过后才开始打印出来。因此,我们在屏幕上从第二行到最后一行得到了混乱的行序列。最后一行被省略,因为该行在变量中,应该只在下一步打印,但所有步骤都已经用完,我们再也看不到屏幕上的行了。

相同的想法perl

awk 'NR>2 {print t} {t=$0}'
Run Code Online (Sandbox Code Playgroud)

$.代表行号和$_ 当前行。
perl -nwhile(<..>) {..}结构的快捷方式,-e用于内联脚本。