对头的否定论据

Negative arguments to head

我正在尝试使用 head 命令,在 macOS 中使用 zsh,代码如下,

a.txt:

1
2
3
4
5
6
7
8
9
10

tail -n +5 a.txt   // line 5 to line end

tail -n -5 a.txt   // last line 5 to line end

head -n +5 a.txt // line 1 to line 5

head -n -5 a.txt  // # What did this do?

最后一条命令显示错误。

head: illegal line count -- -5

head -n -5 到底做了什么?

如果使用 3 而不是 5,它会变得更加清晰。注意标志!

# print 10 lines:
seq 10

1
2
3
4
5
6
7
8
9
10

#-------------------------    
# get the last 3 lines:
seq 10 | tail -n 3

8
9
10

#--------------------------------------
# start at line 3 (skip first 2 lines)
seq 10 | tail -n +3

3
4
5
6
7
8
9
10

#-------------------------    
# get the first 3 lines:
seq 10 | head -n 3

1
2
3

#-------------------------    
# skip the last 3 lines:
seq 10 | head -n -3

1
2
3
4
5
6
7

顺便说一句,man tailman head 解释了这种行为。

head 的某些实现,如 GNU head 支持 -n

的否定参数

但这不标准!你的情况显然不支持。

支持时 负参数应该在执行 head

之前删除最后一个 5 lines