Answers:
只带sed
,不带任何管道:
sed '1d;$d' file.txt
注意
1
平均第一行d
故意删除;
是2个命令的分隔符$
平均最后一行这是使用以下方法的方法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
是内联脚本。
在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
对于Mac用户:
在Mac上,head -n -1
不起作用。取而代之的是,反转文件,截去第一行,然后反转回来:
tail -r file.txt | tail -n +2 | tail -r
说明:
tail -r
:反转其输入中的行顺序
tail -n +2
:从输入的第二行开始打印所有行
head -n -1
删除了.txt
文件的第一行和最后一行。