打印文件内容,不包含第一行和最后一行

打印文件内容,不包含第一行和最后一行

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

答案1

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

sed '1d;$d' file.txt

笔记

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

更具可读性:

sed -e '1d' -e '$d' file.txt

答案2

您不需要提前知道行数。tailhead可以分别从文件的开头或结尾获取偏移量。

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

tail -n +2 file.txt | head -n -1

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

head -n -1 file.txt | tail -n +2

答案3

以下是如何做到这一点awk

awk 'NR>2 {print t} {t=$0}'

还有另一种方式sed

sed '1d;x' file.txt

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

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

同样的想法perl

perl -ne 'print $t if $.>2 ; $t=$_' file.txt

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

答案4

在Python中我会这样做。

#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
    L = []
    for line in f:
        line = re.sub(r'\n', r'', line)
        L.append(line)
    print('\n'.join(L[1:-1]))

将上面的代码粘贴到一个文件中,并将其命名为script.py.针对您要检查的文件运行脚本。

python3 script.py /path/to/the/file

例子:

$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana

相关内容