cat、tail、head、tee、grep、wc、sort文件操作和过滤
详见;http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt103
文件操作和过滤
绝大多数命令行工作是针对文件的。我们会在本节中讨论如何观察及过滤文件内容,使用一条命令从文件中提取所需信息,以及对文件的内容进行排序。
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 信息。
grep: 定位文件中的字符串
不管是命令的名字还是缩写(“General Regular Expression Parser”)都显得非常古怪,但该命令的作用和用法却很简单:grep 将在一个或多个文件中查找给定的模式。其语法为:
grep [选项] <模式> [一个或多个文件]
如果列出了多个文件,将会在每一行结果的开头附加相应的文件名。使用 -h 选项可以不显示这些文件名;使用 -l 选项可以只列出文件名。模式是一个正则表达式,尽管在大多数情况下只是一个简单的单词。下面列出了最常用的几个选项:
-i:进行不区分大小写的搜索;
-v:反转搜索。显示不与模式匹配的行;
-n:显示找到行的行号;
-w:让 grep 在进行模式匹配时匹配整个单词。
让我们回到对邮件守护程序日志文件的分析中。我们想要在 /var/log/mail/info 中找到包含“postfix”模式的所有行。我们就需要输出这个命令:
# grep postfix /var/log/mail/info
grep 命令可用于管道。这样,下面的命令与上面的例子所得到的结果相同:
# cat /var/log/mail/info | grep postfix
如果我们想要找到不与“postfix”模式匹配的所有行,我们就应该使用 -v 选项:
# grep -v postfix /var/log/mail/info
现在,我们假定想要查找关于成功发出的邮件的全部信息。这样,我们需要找到邮件守护程序(包含“postfix”模式)在日志文件中添加的行,而且这些行还必须包含成功发送的信息(“status=sent”):
# grep postfix /var/log/mail/info |grep status=sent
我们在本例中使用了两次 grep。这种方法虽然可以达到我们的目的,但显得有点麻烦。我们可以使用 fgrep 工具达到相同的效果。首先,我们需要创建一个包含需要匹配的模式的文件。这样的文件可以用这种方式来创建(我们使用 patterns.txt 来作为文件名):
# echo -e 'status=sent postfix' >./patterns.txt
然后,我们将会用 patterns.txt 文件中的模式列表作为参数调用 fgrep 工具,而不是“两次调用”grep:
# fgrep -f ./patterns.txt /var/log/mail/info
文件 ./patterns.txt 可以包含您喜欢的任意多个模式。每个模式都必须独占一行。
例如,要选择已经成功发送给 的邮件的有关信息,只需将此电子邮件地址添加到 ./patterns.txt 文件,试试这条命令:
# echo 'peter@mandrakesoft.com' >>./patterns.txt
显然,您可以将 grep 与 tail 或者 head 组合起来使用。如果我们想要查找上上次发送给 的邮件,只需输入:
# fgrep -f ./patterns.txt /var/log/mail/info | tail -n2 | head -n1
在这里,我们应用了上面讲述的过滤器,并将其放入 tail 和 head 命令的管道。这将会从数据中取出倒数第二行。
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 命令,它会输出排序列表的最后一行。
cat、tail、head、tee、grep、wc、sort文件操作和过滤的更多相关文章
- 00009 - cat、tail、head、tee、wc、sort文件操作和过滤
绝大多数命令行工作是针对文件的.我们会在本节中讨论如何观察及过滤文件内容,使用一条命令从文件中提取所需信息,以及对文件的内容进行排序. cat.tail.head.tee:文件打印命令这些命令的语法基 ...
- 【Linux】常见基础命令之文件操作
vi:编辑文件 lilip@ubuntu:~/test/page$ vi test.txt i 切换到输入模式,以输入字符. x 删除当前光标所在处的字符. : ...
- 数据流重定向和管道命令, grep, tr,sort, wc, cut,split,tee,sleep(shell 02)
主要内容 1.标准输入输出和错误 2.管道命令和 grep, tr,sort, wc, cut,split,tee,sleep 标准输入输出和错误 标准输入(stdin) 是指令数据的输入,代码为0, ...
- grep,cut,wc,sort,diff,uniq,patch命令
文本处理工具: Linux上文本处理三剑客: grep,egrep,fgrep: 文本过滤工具(模式: pattern)工具; grep:基本正则表达式,-E,-F egrep:扩展正则表达式,-G, ...
- Linux统计文件/目录数量ls -l | grep "^-" | wc -l匹配开头和结尾
Linux统计文件数量 ls -l | grep "^-" | wc -l “^-” 一般文件 “^d” 目录文件 shell/vim中^表示开头 cat repatterns ...
- 024:Java流实现Shell:cat 1.log | grep a | sort | uniq -c | sort -rn
本文阅读时间大约13分钟(本文实践性很强,建议pc端阅读,最好亲自实践). 参考答案 这个问题考察的是对Linux命令的熟悉程度,以及对Java中集合操作的综合运用,自从转到Java 8以后,我就一直 ...
- Linux统计文件/目录数量ls -l | grep "^-" | wc -l匹配开头和结尾,wc -c统计字符串长度
Linux统计文件数量 ls -l | grep "^-" | wc -l “^-” 一般文件 “^d” 目录文件 shell/vim中^表示开头 cat repatterns ...
- 文本处理命令 cat more less cut wc sort uniq
1.cat cat主要功能: 1.一次显示整个文件. cat filename 2.从键盘创建一个文件. cat > filename (只能创建新文件,不能编辑已有文件). 1 ...
- 几个常用的文本处理shell 命令:find、grep、sort、uniq、sed、awk
find 文件查找 查找txt和pdf文件 find . \( -name "*.txt" -o -name "*.pdf" \) -print 查找所有字母开 ...
随机推荐
- hexo博客MathJax公式渲染问题
这个问题自己很早以前便碰到了,用MathJax语法写的一些公式,在本地Markdown编译器上渲染是没问题的,可是部署到hexo博客中就出现问题了,之前我是使用图片代替公式应付过去了,今天从网上找了一 ...
- Redis-消息发布与订阅
redis的消息发布与订阅适合做在线聊天, 消息推送 使用方法: 发布端: publish +频道名称 + 发布内容 订阅端: subscribe + 频道名称 发布端例子: 127.0.0.1:63 ...
- Linux下软件的卸载
一.rpm -q -a 查看所安的全部软件 二.#rpm -e [package name] 卸载想要卸载的软件
- 设置双击直接打开.ipynb文件
本文环境:win10(64)+anaconda3(64) anaconda3安装好后,可在开始菜单下查看 背景:jupyter notebook打开后无法更改路径,只能在默认路径下upload文件(如 ...
- u盘安装原版win10系统1703更新
7月底,微软发布了win10的1703更新,听说值得一试,于是,安装ultraISO(下载地址http://pan.baidu.com/s/1dFu48d7 密码: 53cg),下载win10的ISO ...
- 浅谈JavaScript和DOM中的类数组对象
JavaScript是一门弱类型语言,它的数据类型分为两大类:简单数据类型(5种:Undefined.Null.Boolean.Number.String)和复杂数据类型(1种:Object).Obj ...
- NYOJ--46--最少乘法次数
最少乘法次数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 给你一个非零整数,让你求这个数的n次方,每次相乘的结果可以在后面使用,求至少需要多少次乘.如24:2*2 ...
- SpringBoot基础梳理
1.入口类和@SpringBootApplication注解: SpringBoot通常有一个名为*Application的入口类,入口类里面有main方法,我们可以通过启动main方法启动sprin ...
- TASKCTL产品功能清单-转载
功能分类 功能描述 一级 二级 关系 调度控制 作业依赖关系调度 作业依赖关系调度是调度最基本的功能,指作业间具有顺序的运行,比如:a.b.c三个作业,只有当a完成后才运行b,b完成才能运行c 作业并 ...
- 一步一步学MySQL-日志文件
错误日志 错误日志不用多说,记录了mysql运行过程中的错误信息,当出现问题时,我们可以通过错误日志查找线索. 慢查询日志 可以通过参数long_query_time来设置时间,当sql语句执行超过指 ...