对头的否定论据
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 tail
和 man head
解释了这种行为。
head
的某些实现,如 GNU head
支持 -n
的否定参数
但这不标准!你的情况显然不支持。
支持时 负参数应该在执行 head
之前删除最后一个 5 lines
我正在尝试使用 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 tail
和 man head
解释了这种行为。
head
的某些实现,如 GNU head
支持 -n
但这不标准!你的情况显然不支持。
支持时 负参数应该在执行 head
5 lines