Shell 使用head与tail打印文件的前10行和后10行

Shell 使用head与tail打印文件的前10行和后10行cat命令并不适合查看上千行的大文件,因为它会把整个文件内容全部给打印出来。相反,我们只想查看文件的一小部分内容(例如文件的前10行或后10行)。有时候可能是文件的前n行或后n行,也可能是除了前n行或后n行之外所有的行,亦或是第m行至第n行。

headtail命令可以帮助我们实现这些需求。

Shell使用head与tail打印文件的前10行和后10行

实战演练

head命令总是读取输入文件的起始部分。

(1) 打印前10行:

$ head file

(2) 从stdin读取数据:

$ cat text | head

(3) 指定打印前几行:

$ head -n 4 file

该命令会打印出文件的前4行。
(4) 打印除了最后M行之外所有的行:

$ head -n -M file

 注意,这里的-M表示的是负数,并非选项。

例如,用下面的命令可以打印出除最后5行之外的所有行:

$ seq 11 | head -n -5
1
2
3
4
5
6

而下面的命令会打印出文件的第1行至第5行:

$ seq 100 | head -n 5

(5) 打印除最后几行之外的其他行是head的一种常见用法。在检查日志文件时,我们通常要查看最近(也就是最后)的若干行。

(6) 打印文件的最后10行:

$ tail file

(7) 从stdin中读取输入:

$ cat text | tail

(8) 打印最后5行:

$ tail -n 5 file

(9) 打印除了前M行之外所有的行:

$ tail -n +(M+1)

例如,打印除前5行之外的所有行,M+1=6,因此使用下列命令:

$ seq 100 | tail -n +6

这条命令将打印出第6行至第100行。

tail命令的一个常见用法是监视一个内容不断增加的文件(例如系统日志文件)中出现的新行。因为新增加的行都是出现在文件的尾部,可以在其被写入的时候,使用tail将这些行显示出来。为了能够监视文件的增长,tail有一个特殊的选项-f--follow,允许tail关注文件内容的更新并将其显示出来:

$ tail -f growing_file

你可能希望将该命令用于日志文件。监视文件内容增加的命令如下:

# tail -f /var/log/messages

或者

$ dmesg | tail -f

dmesg可以查看内核的环形缓冲区消息。我们通常使用该命令调试USB设备、检查磁盘操作或是监视网络连接性。-f还可以加入一个睡眠间隔-s,这样我们就可以设置监视文件更新的时间间隔了。

可以设置tail在指定进程结束后随之结束运行,假设进程Foo在向一个我们正在监视的文件中追加数据,那么tail -f应该一直执行到进程Foo结束。

$ PID=$(pidof Foo)
$ tail -f file --pid $PID

当进程Foo结束之后,tail也会跟着结束。
让我们实际演练一下。
(1) 创建一个新文件file.txt,使用你惯用的文本编辑器打开这个文件。

(2) 现在运行下列命令:

$ PID=$(pidof gedit)
$ tail -f file.txt --pid $PID

(3) 向文件添加新行并不断地保存文件。

当你更新文件时,新添加的内容都会被tail命令写入终端。关闭文本编辑器后,tail命令也会随之结束。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Shell 实例