情景

会点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

总结

  1. head -n k=head -n +ktail -n k=tail -n -k,可以简单记忆为头正尾负

  2. 无论k前面的符号怎样,tail都是输出尾部内容,head都是输出头部内容的;

  3. 特别注意tail -n +k,这里的k表示从第K行开始;(因此上例中,head -n -3输出7行,而tail -n +3输出8行。)

  4. tail -n +k 是从第K行开始输出,head -n -k 是最后k行不要

搞懂head 和 tail 命令的更多相关文章

  1. 三文搞懂学会Docker容器技术(中)

    接着上面一篇:三文搞懂学会Docker容器技术(上) 6,Docker容器 6.1 创建并启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --na ...

  2. 搞懂ELK并不是一件特别难的事(ELK)

    本篇文章主要介绍elk的一些框架组成,原理和实践,采用的ELK本版为7.7.0版本 一.ELK介绍 1.1.ELK简介 ELK是Elasticsearch.Logstash.Kibana三大开源框架首 ...

  3. 不想再被鄙视?那就看进来! 一文搞懂Python2字符编码

    程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦 我们项目组一值使用 ...

  4. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  5. 架构师必须搞懂DNS【转】

    DNS,全称Domain Name System,即域名系统,搞清楚,它不是DNF地下城与勇士. DNS是怎么来的,我们知道要访问一个服务器的资源可以通过IP的形式访问,但IP地址比较难记,也不方便读 ...

  6. 搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务

    搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务 初步认识RocketMQ的核心模块 rocketmq模块 rocketmq-broker:接受生产者发来的消息并存储(通过调用rocke ...

  7. 搞懂分布式技术10:LVS实现负载均衡的原理与实践

    搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一 ...

  8. 搞懂分布式技术5:Zookeeper的配置与集群管理实战

    搞懂分布式技术5:Zookeeper的配置与集群管理实战 4.1 配置文件 ZooKeeper安装好之后,在安装目录的conf文件夹下可以找到一个名为“zoo_sample.cfg”的文件,是ZooK ...

  9. 搞懂分布式技术6:Zookeeper典型应用场景及实践

    搞懂分布式技术6:Zookeeper典型应用场景及实践 一.ZooKeeper典型应用场景实践 ZooKeeper是一个高可用的分布式数据管理与系统协调框架.基于对Paxos算法的实现,使该框架保证了 ...

随机推荐

  1. CentOS6X安装PHP5.5

    CentOS6.x默认的php版本是php5.3,已经过时喽,现在最新的稳定版是5.5.38. 安装方法: 1.先下载2个源 rpm -Uvh https://dl.fedoraproject.org ...

  2. 利用inotifywait监控主机文件和目录

    利用inotifywait监控主机文件和目录 inotifywait 是一个可以实时监控文件变动的工具,它利用linux内核中的inotify机制实现监控功能. 查看内核版本 [root@Oracle ...

  3. WEB前端的性能优化

    转自:http://www.2cto.com/kf/201604/498725.html 网站的划分一般为二:前端和后台.我们可以理解成后台是用来实现网站的功能的,比如:实现用户注册,用户能够为文章发 ...

  4. J2EE之Servlet初见

    Servlet是J2EE12种规范之中的一个.它也是用java语言编写的程序,其本身也是一种JAVA类,在须要的时候被实例化,不须要的时候自己主动销毁,Servlet的执行是在Servlet容器内执行 ...

  5. Linux利器:WinSCP,Putty,pscp和psftp

    # Summary PuTTY (Telnet 和 SSH 客户端) PSCP (SCP 客户端, 命令行下通过 SSH 拷贝文件,类似于 Unix/Linux 下的 scp 命令) PSFTP (S ...

  6. 第一百四十七节,封装库--JavaScript,滑动导航

    JavaScript,封装库--滑动导航 效果图 html <!--滑动导航--> <div id="nav"> <ul class="ab ...

  7. java 理解java的三大特性之封装

    使用封装有三大好处: 1.良好的封装能够减少耦合. 2.类内部的结构可以自由修改. 3.可以对成员进行更精确的控制. 4.隐藏信息,实现细节. public class Wife { private ...

  8. 【BZOJ】3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3404 写挫好几次.... 裸的博弈论即可.. #include <cstdio> #in ...

  9. 图像特征点匹配C代码

    #include "opencv2/core/core.hpp" #include "highgui.h" #include "opencv2/img ...

  10. VC++6.0 打开原来工程突然特别慢或者打不开?

    VC++6.0打开原来工程突然特别慢或者打不开?    近几日,对原来工程做了一些修改,感觉打开特别慢,甚至打不开,在Loading Workspace时就卡住了. 解决办法:删除工程文件中的三个文件 ...