有没有一种简单的方法可以回显文件,跳过第一行和最后一行?我正在考虑从head
into管道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 -n
是while(<..>) {..}
结构的快捷方式,-e
用于内联脚本。