返回首页 两个月精通 Shell 脚本

shell 学习第二十四天----提取开头或结尾数行

提取开头或结尾数行

有时,会需要从文本文件里把几行字----多半是靠近开头或结尾的几行,提取出来;或者,有时只要瞧瞧工作日志的后面几行,就可以了解最近工作活动的大概情况。可以用下面的方式显示标准钱 n 条记录,或是命令行文件列表中的每一个前 n 条记录。

head -n n [file(s)]
head -n [file(s)]
awk 'FNR<= n' [file(s)]
sed -e nq [file(s)]
sed nq [file(s)]

个人觉得最好用的显示文本文件的头几行最好用的是 head -n [file(s)]

head 的常用选项:

  • -q:隐藏文件名
  • -v:显示文件名
  • -c<字节>:显示字节数
  • -n<行数>:显式的行数

在交互式 shell 通信期中,有时需要监控某个文件的输出----如日志这类持续写入状态的文件。-f 选项这时就派上用场了,他可以要求 tail 显示指定的文件结尾行数,接着进入无止境的循环中----休息一秒后又再度醒来并检查是否需要显示更多的输出结果。再设置 -f 的状态下,tail 只有当你中断它时才会停止----通常是输入 Ctrl+C 来中断:

tail -n 25 -f /var/log/messages 观察此选项不可用于 shell 脚本

直到按了 ctrl+c 选项后才停止。

由于 tail 加上 -f 选项之后便不会自己中断,所以此选项不能用于 shell 脚本。使用 -f 选项有实时监听的效果。

head 案例:

使用命令:head -n 3 /etc/passwd 结果是显示文件的头三行,如果命令为:head -n -3 /etc/passwd 结果是显示除了最后三行都显示,注意到区别没有?

相似的,显示文件的前 n 个字节,以及除了最后 n 个字节以外的内容也没问题了。

headtail 如果组合使用:

head -n 5 /etc/passwd | tail -n 3

输出 /etc/passwd 的第三道第五行。