绝大多数命令行工作是针对文件的。我们会在本节中讨论如何观察及过滤文件内容,使用一条命令从文件中提取所需信息,以及对文件的内容进行排序。

cat、tail、head、tee:文件打印命令
这些命令的语法基本上相同的:命令名 [选项] [文件],而且您可以在管道中使用这些命令。这些命令的功能都是根据特定的条件选择文件内容进行打印。

cat 工具会将文件的全部内容打印到标准输出。

这是最常用的命令之一。例如,您可以使用:

# cat /var/log/mail/info

将邮件程序守护程序日志的内容打印到标准输出[14]。

cat 命令有一个非常有用的选项(-n),该选项将允许您打印行号。

某些文件,如守护程序日志文件(如果相应的守护程序运行了的话)可能非常大[15],在屏幕上打印全部内容可能没什么必要。

您经常只是需要看看一个文件的某几行。

您可以使用 tail 命令完成这一功能。默认情况下,下面的命令将会打印 /var/log/mail/info 文件的最后十行:
# tail /var/log/mail/info

您可以使用 -n 选项显示文件的最后 N 行。例如,要显示最后两行,您应该执行:
# tail -n2 /var/log/mail/info

而 head 命令与 tail 十分相似,只是打印文件的头几行。默认情况下,下面的命令将会打印 /var/log/mail/info 文件的头十行:
# head /var/log/mail/info

和 tail 一样,您也可以使用 -n 选项指定要打印的行数。例如,要打印前两行,您应该执行:
# head -n2 /var/log/mail/info

您还可以组合使用这几条命令。

例如,如果您想要只显示第九行和第十行,您可以先使用 head 命令选择文件的前十行,然后再将结果通过管道送到 tail 命令。
# head /var/log/mail/info | tail -n2

竖线后面的部分将选择最后两行,然后将其打印到屏幕。同样地,您也可以选择只打印文件的倒数第 20 行:
# tail -n20 /var/log/mail/info |head -n1

在本例中,我们让 tail 选择了文件的最后 20 行,然后将结果通过管道传送给 head。然后 head 命令将会从得到的数据中取出第一行打印到屏幕上。

现在我们假定您想要将上例中的结果在屏幕上显示的同时还保存到文件 results.txt。

tee 工具可以帮到我们。其语法是:
tee [选项] [文件]

现在,我们可以将上一命令做如下更改:
# tail -n20 /var/log/mail/info |head -n1|tee results.txt

我们再来举一个例子。我们想要选择最后 20 行,将其保存到 results.txt,但是只在屏幕上显示这 20 行中的第一行。那么,我们应该输入:
# tail -n20 /var/log/mail/info |tee results.txt |head -n1

tee 命令有一个非常有用的选项(-a),它允许您将数据追加到已有文件。

让我们再回过头来看看 tail 命令。像日志这样的文件应该是在不断变化的,因为与其相关的守护程序每时每刻都在记录着它所执行的动作和发生的事件。所以,如果您想要交互地观看日志文件,您可以使用 -f 选项:
# tail -f /var/log/mail/info

在本例中,/var/log/mail/info 文件的所有更改都会立即打印到屏幕上。当您想要知道您系统的工作原理时,使用带 -f 选项的
tail 命令将非常有用。例如,通过查看 /var/log/messages 日志文件,您可以时刻跟踪系统信息和各种守护程序。

在下一节中,我们将会看到如何将 grep 用作过滤器,以便从来自其它服务的信息中拆出 Postfix 信息。

wc:统计文件中的元素
wc 命令(Word Count)用于统计文件中的字符串的数量。它还可用于统计字节数、字符数以及最长行的长度。其语法为:
wc [选项] [文件]

下面的选项比较有用:

-l:打印换行符数;

-w:打印单词数;

-m:打印总计字符数;

-c:打印字节数;

-L:打印所获取文本中最长行的长度。

wc 命令默认情况下会打印换行符数、单词数和字符数。下面是一些例子:

如果我们想要查找系统中的用户数,我们就可以输入:
$wc -l /etc/passwd

如果我们想要知道系统中的 CPU 数,我们可以输入:
$grep "model name" /proc/cpuinfo |wc -l

在上一节中,我们通过 ./patterns.txt 文件获取了成功发送到指定电子邮件地址的邮件列表。如果我们想要知道一共有多少封邮件,那么可以将过滤结果重定向到 wc 命令的管道:
# fgrep -f ./patterns.txt /var/log/mail/info | wc -l

sort:排序文件内容
下面列出了这一强大工具的语法[16]:
sort [选项] [文件]

现在我们来考虑一下对 /etc/passwd 文件进行排序。正如您看到的,这个文件并未经过排序:
$ cat /etc/passwd

如果我们想要按照 login 域进行排序,则应输入:
$ sort /etc/passwd

默认情况下,sort 命令会按照第一个域(本例中就是 login)对数据进行升序排序。如果我们想要以降序方式排序,可以使用选项 -r:
$ sort -r /etc/passwd

每个用户在 /etc/passwd 文件中都有他自己的 UID。现在我们来试试按照 UID 域进行升序排序:
$ sort /etc/passwd -t":" -k3 -n

我们在这里用到了下列 sort 选项:

-t":":通知 sort 域之间通过 ":" 符号分隔;

-k3:意味着要根据第三列进行排序;

-n:表明排序是按照数字顺序,而非字母顺序。

如果要想按照降序排序,就是:
$ sort /etc/passwd -t":" -k3 -n -r

请注意,sort 还有两个比较重要的选项:

-u:执行严格定序:重复的排序关键字将被丢弃;

-f:忽略大小写。

最后,如果我们想要找到 UID 最高的用户,可以使用这条命令:
$ sort /etc/passwd -t":" -k3 -n |tail -n1

我们先是对 /etc/passwd 文件按 UID 进行了升序排序,然后将结果通过管道传送给 tail 命令,它会输出排序列表的最后一行。

00009 - cat、tail、head、tee、wc、sort文件操作和过滤的更多相关文章

  1. cat、tail、head、tee、grep、wc、sort文件操作和过滤

    详见;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt103 文件操作和过滤 绝大多数命令行工作是针对文件的.我们会在本节中讨论如何 ...

  2. 文本处理命令 cat more less cut wc sort uniq

    1.cat       cat主要功能: 1.一次显示整个文件. cat filename 2.从键盘创建一个文件. cat > filename   (只能创建新文件,不能编辑已有文件). 1 ...

  3. Linux中gz文件操作遇到的一些技巧和坑

    目录 不解压情况下获取gz超大文件的前/后几行? Perl读入gz文件操作? 不能直接通过wc -l 来统计gz文件的行数 前提是gz文件超大,如上百G,肯定不能直接解压来做. 不解压情况下获取gz超 ...

  4. linux基本命令之文件浏览(cat,more,less,tail,head),文件操作命令(cp,mv,rm,find)

    linux文件浏览,文件操作命令 文件管理之文件浏览命令 1.cat命令:显示文本文件所有内容 格式:cat 文件名 适用场景:适合只有少量数据的文件,例如只有几行内容的可以使用此命令. 2.more ...

  5. 每天学点linux命令--tail,cut,sort,uniq

    tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新, ...

  6. 每日回顾Shell —cat,tail,head

    Shell中常常会用到cat命令.可是总是不是特别清楚: cat命令的用途是连接文件或标准输入并打印. 这个命令经常使用来显示文件内容.或者将几个文件连接起来显示.或者从标准输入读取内容并显示,它常与 ...

  7. 024:Java流实现Shell:cat 1.log | grep a | sort | uniq -c | sort -rn

    本文阅读时间大约13分钟(本文实践性很强,建议pc端阅读,最好亲自实践). 参考答案 这个问题考察的是对Linux命令的熟悉程度,以及对Java中集合操作的综合运用,自从转到Java 8以后,我就一直 ...

  8. [转]SVN使用log,list,cat,diff查看所有及特定文件版本信息

    [转]SVN使用log,list,cat,diff查看所有及特定文件版本信息 http://onefishum.blog.163.com/blog/static/5184730520113153402 ...

  9. tail -f 实时查看日志文件 linux查看日志后100行

    tail -f 实时查看日志文件 tail -f 日志文件logtail - 100f 实时查看日志文件 后一百行tail -f -n 100 catalina.out linux查看日志后100行搜 ...

随机推荐

  1. pycharm远程调试配置

    目录: 安装pycharm 配置pycharm远程调试 使用测试 一.安装pycharm(略) 二.配置pycharm远程调试 1.菜单--->Tools--->Deployment--- ...

  2. seelog 文件输出格式

    项目中用到seelog,希望每个小时的记录输入在当前小时命名的日志,配置如下: <seelog> <outputs formatid="leads"> &l ...

  3. .NET本质论 用类型编程

    运行时的类型 类型本身并不是万能的.类型真正有意思的地方在于,程序员使用类型的实例,并让它们相互作用.类型的实例(instance)既可以是对象,也可以是值,这取决于类型如何定义的.基本数据类型(pr ...

  4. xmtech-3516默认环境变量

    xmtech # print bootcmd=setenv setargs setenv bootargs ${bootargs};run setargs;sf probe ;sf read ;squ ...

  5. removing-guest-session-at-login-in-ubuntu-14-04

    http://askubuntu.com/questions/451526/removing-guest-session-at-login-in-ubuntu-14-04

  6. python一些东西

    assert repr() >>> a ['d', 'c', 'c', 'f', 'a', 'a', 'b', 'c', 'd'] >>> sorted(a) [' ...

  7. jdk源码剖析三:锁Synchronized

    一.Synchronized作用 (1)确保线程互斥的访问同步代码 (2)保证共享变量的修改能够及时可见 (3)有效解决重排序问题.(Synchronized同步中的代码JVM不会轻易优化重排序) 二 ...

  8. ionic 监听路由事件变化

    (function(){ angular.module("cakeStore", ["ngRoute", "ionic","coo ...

  9. ubuntu-docker入门到放弃(二)docker初探(基本用法及命令)

    一.使用公共镜像 docker有一个开源的镜像管理系统,上面有很多常见的images,如mysql,nginx,tomcat等,可以直接根据自己的需求下载下来用,还有系统images,如redhat, ...

  10. WINDOWS 命令行 串口 COM 发送数据

    WINDOWS 命令 串口 数据 type con>com1 回车. com1 为想发送的串口. 输入字符并回车即可.