情景
会点linux命令的人都知道head -n k和tail -n k(k≥0)的作用,但却不知道还支持head -n -k和tail -n +k的用法, 更不知道有着怎样的作用了。
图解
下面,用一张图让你搞懂它们:
除了最后k行 从k行开始
备注:方框表示文件全部内容,绿色部分表示命令产生的结果;
举例
创建一个文件,文件共10行,每行的内容依次为1-10数字,如下:
cat testfile
1
2
3
4
5
6
7
8
9
10
cat testfile | wc -l
10
head 命令
当k=3时,分别执行上述命令:
[bjchengpeng@hz-10-120-241-113 logs]$ head -n 3 testfile 1 2 3 [bjchengpeng@hz-10-120-241-113 logs]$ head -n +3 testfile 1 2 3 [bjchengpeng@hz-10-120-241-113 logs]$ head -3 testfile 1 2 3
由此可见,head -n k和head -n +k意义相同;
[bjchengpeng@hz-10-120-241-113 logs]$ head -n -3 testfile
1
2
3
4
5
6
7
-k的意义是除了最后k行的所有行。
tail 命令
[bjchengpeng@hz-10-120-241-113 logs]$ tail -n 3 testfile
8
9
10
[bjchengpeng@hz-10-120-241-113 logs]$ tail -n -3 testfile
8
9
10
[bjchengpeng@hz-10-120-241-113 logs]$ tail -3 testfile
8
9
10
[bjchengpeng@hz-10-120-241-113 logs]$ tail -n +3 testfile
3
4
5
6
7
8
9
10
tail -n -k 命令和 tail -n k 结果一样,
+k的意义是从第k行开始,输出所有行;
来一个常规第题目:显示第3-6行
[bjchengpeng@hz-10-120-241-113 logs]$ tail -n +5 testfile | head -2 5 6 [bjchengpeng@hz-10-120-241-113 logs]$ cat testfile | head -n -4 | tail -2 5 6 [bjchengpeng@hz-10-120-241-113 logs]$ head -n -4 testfile | tail -2 5 6 [bjchengpeng@hz-10-120-241-113 logs]$ head -6 testfile | tail -2 5 6
总结
-
head -n k
=head -n +k
,tail -n k
=tail -n -k
,可以简单记忆为头正尾负
; -
无论k前面的符号怎样,tail都是输出尾部内容,head都是输出头部内容的;
-
特别注意tail -n +k,这里的k表示从第K行开始;(因此上例中,head -n -3输出7行,而tail -n +3输出8行。)
- tail -n +k 是从第K行开始输出,head -n -k 是最后k行不要