有没有一种简单的方法可以回显文件,跳过第一行和最后一行?我正在查看从head
into 的管道tail
,但对于那些,我似乎必须从一开始就知道总行数。我也在看split
,但我也没有找到办法做到这一点。
答案1
只是有sed
,没有任何管道:
sed '1d;$d' file.txt
笔记
1
意思是第一行d
意思是删除;
是 2 个命令的分隔符$
意思是最后一行
更具可读性:
sed -e '1d' -e '$d' file.txt
答案2
您不需要提前知道行数。tail
并head
可以分别从文件的开头或结尾获取偏移量。
该管道从文件的第二行开始(跳过第一行),并在最后一行停止(跳过最后一行)。要在开头或结尾跳过多行,请相应地调整数字。
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 -n
是while(<..>) {..}
结构的快捷方式,-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