linux centos7中查看文件命令很多,如查看全部内容的cat、nl和 tac,分屏显示文件内容的more和less。但没有常用的命令用于查看任意行。本文就此讨论一下如何查看任意单行或多行。
为了分析问题方便,我们分两种情况分别讨论。
我们提前准备素材:文件文件a.txt,其中有15行内容,其中有两空行。
这是由/etc/passwd转存而来。方便处理与训练。
一、指定行号
1.查看任意一行
我们查看文件的第5行,这里指定行号,仅仅查看某一行。
如何查看文件第5行呢?
head+tail
我们查看文件的命令很多,常用的有 cat、 nl、head、tail、more和less。但只查看一行,一个命令不能完成,大多数命令是查看很多行(cat查看全部行;head查看前几行;tail查看后几行)。我们可以由两个常用命令组合,查看第5行:先用head -5 file命令查看文件前5行,再通过管道|执行tail -1命令,查看倒数一行,达到仅查看第5行之目的。
sed
学习过sed流编辑器,对其强大功能深有体会。查看第5行,十分简单的事情。
awk
awk也是处理文本文件强大工具,读行,分析行,可以按行输出,按行内分隔符分成多个字段 ,分别输出,或有限输出。查看第5行内容,实现很容易。
在第5行查看条件后面,可以写动作{print $0},此处不写,是一种简便方法。默认打印,默认打印 整行。
ex
这是vim的一种模式,可以方便查看某一行:
ed
与ex相同,ed也是一种编辑器,可以查看文件的行内容:
2.查看任意多行
用前述命令可以调整一下,即可查看多行。我们下面的案例,均查看5-9行
sed命令,用两个数字加英文逗号分隔
awk命令,NR==5,NR==9表示查看5-9行区间
NR>=5&&NR<=9表示查看5-9行区间
ex也可以查看多行内容:
ed命令只能查看单行内容。
二、匹配行
不指定行号,但要求查看包含字符串的行,这就用到字符的模式匹配,通过匹配查看多行文件内容。下面的案例,统一要求匹配“adm”(即第4行)。
1.匹配单行
由匹配字符查看行内容,常用查看文件命令都用不上。但linux三剑客可以发挥重要作用。
sed
sed命令中,用//把匹配字符包括起来,由此可以查看匹配行。
需要匹配的字符一般不用双引号括起来。
特殊情况,匹配最后一行,用$表示。
awk
awk命令与sed命令相同,用//把匹配字符包括起来,由此可以查看匹配行。
grep
grep是搜索字符常用命令,比其他任何命令都强大。搜索一个字符串,由此查看包括此 字符串的行内容,是grep基本功能。
如果是查找以字符串开头的行,可以这样做:
在模式匹配中,用“^”表示开头,用“$”表示结尾。
如果查看的字符串是一个单词,可以这样写:grep -w ‘单词’ file
或者用 ‘\< 单词 \>’表达,‘ \b单词 \b’也有同样效果。
ex
ex也可以匹配模式,以便查询行内容:
ed同样效果。
2. 匹配行区间
查看多行内容,可以通过匹配两个字符串完成,也可以指定一行,另一行通过模式匹配。
sed
我们可以通过匹配/bin/和/lp/两个字符,查看包括这两行及其中间行的多行内容。
我们再训练第3行到模式匹配/lp/之间的多行内容:
如果匹配/lp/至最后一行:
awk
awk多行匹配与查看与sed命令基本相同,比单行匹配多一个条件而已。
grep
grep搜索字符串功能强大,可以搜索多个不同字符串,可以查看一个字符串匹配的前后几行。熟练应用,很容易达到我们的目的。grep 命令的-A -B -C选项,可以参考。
案例:查看lp字符前后3行内容
小结
本文介绍的几种常见的查看单行或多行文件内容的方法与命令。没有介绍vim,因为在编辑过程中,可以查看的内容很多,光标移动到哪行就可以看到哪行,只需要光标移动即可,不需要命令。
查看多行文件内容用的方便的是sed命令,利用模式匹配查看多行内容的是grep命令。awk命令及head、tail命令组合,是备用之选。