在阅读与编辑文件时,我们总会选择几个常用的工具。本节介绍的是 Linux 平台上常用的几个阅读与编辑文档的工具。
cat、tac、nl命令都可以将文件内容一次性输出到屏幕上。cat命令一般用来查看文件,合并文件;tac命令是将cat命令倒过来查看,甚至可以将字符颠倒;nl命令相当于“cat-n”,但是不止于此,还可以用作空位补零。
1.cat命令速查手册
cat是concatenate的缩写,它的主要功能是一次性将所有内容输出到屏幕上,一般在文件内容较少时使用。
(1)cat命令的语法格式:cat[选项][文件]。
(2)cat命令的选项说明如表3.3所示。
表3.3 cat命令的选项说明
(3)cat命令示例。
2.cat命令编辑文件小技巧
cat命令不仅可以用来查看文件内容,还可以用来编辑简短的内容,并将其输入文件中。
(1)将内容追加到文件末尾。
(2)编辑内容,将其追加到文末。
(3)将文件1.txt内容追加到out.log。
3.tac命令速查手册
tac是反写的cat,其作用是将文件中的内容倒过来显示在控制台上。
4.nl命令速查手册
nl命令在info手册中的意思是“Number lines and write files”,它的作用可以被看作“cat-n”,其常用命令为“nl xx.log”,即打印文本时显示行号。nl命令可以为序号补零,示例如下。
注意: cat命令还有其他功能。例如,合并文件,并与输出符“>”一起使用,输出到新文件中;显示文件中不可见字符;与管道符“|”配合使用,用作管道符的输入内容,如“cat xxx.log|grep'我是cat'”,就是从xxx.log中找到“我是cat”字符;清空运行时文件,其命令为“cat/dev/null>xxx.log”。输出符、管道符等特殊符号的作用详见3.6节“特殊字符简析”。
tail命令一般用来查看日志使用,显示文件最新追加的内容。head命令一般用来从头部查看文件内容。
1.tail命令速查手册
tail命令默认在屏幕上显示指定文件的末尾10行。处理多个文件时会在各个文件之前附加包含文件名的行。如果没有指定文件或文件名为“-”,则按读取标准输入。
注意: 在使用“tail-f xxx.log”查看日志时,可以使用“Ctrl+S”快捷键停止滚动日志,使用“Ctrl+Q”快捷键继续滚动日志。
2.head命令速查手册
与tail命令相对的head命令,意思是从开头显示文件内容。head命令一般与其他命令合用的比较多,这种组合命令在后面的章节中会经常出现。
Linux有很多文件编辑工具,如nano、emacs。在Linux中常用的编辑器是vi/vim。vim是vi的增强版。
简单来说,喜欢黑白的用vi,喜欢彩色的用vim。当然,vim不仅有彩色高亮功能,还有做一些方便的个性化定制功能。感兴趣的读者可以搜索“vimrc”,进行个性化定制。
为什么vim成为Linux最常用的文本编辑工具?因为它相比nano功能更强大,相比emacs学习难度较低。当然,最重要的原因是vi/vim被主流Linux发行版本内置了关系。
在熟练掌握Linux命令的操作后,我们可以使用vimrc进行个性化vim编辑器定制。
vim 有几种模式,即正常模式(normal)、编辑模式(edit)、底线命令模式(end line command)和visual模式。visual模式不常用。在normal模式下输入“v”,可以直接进入vim编辑器。
使用vi/vim打开文件时,编辑器默认是normal模式。在切换到其他模式后,可以按“Esc”键返回这个模式。
1.vi/vim如何编辑内容
(1)使用vim命令打开文件。
(2)在normal模式下输入“i”“a”“o”“s”,进入编辑模式。在编辑模式下输入内容和在Windows下打开写字板操作没有不同。
(3)在编辑模式下可以使用方向键移动光标进行字符的编辑。vim的编辑命令如表 3.4所示。
表3.4 vim的编辑命令
续表
(4)在编辑完成后,按“Esc”键退出编辑模式,进入normal模式。使用冒号“:”进入底线命令模式,输入“wq”保存退出。在vi/vim编辑器中,感叹号“!”就是强制的意思。所以一般输入“:wq!”强制保存退出。输入“:q”正常退出。输入“:q!”强制退出不保存,会丢失编辑内容。
(5)如果想将文章中某段内容提取出来保存为一个新文件,则可以使用下面的命令:
2.normal模式下的移动与增删改查
下面讲解提升文本操作效率的一些命令,normal模式下的移动命令如表3.5所示,normal模式下的增删改查快捷命令如表3.6所示。
表3.5 normal模式下的移动命令
续表
表3.6 normal模式下的增删改查快捷命令
注意: n、N 命令配合/、?使用会有不同的功能。/+n,一直向下搜索,/+N,一直向上搜索,?+n,一直向上搜索,?+N,一直向下搜索。
3.vim底线命令
前面用到的:wg已经用到vim的底线命令,即在normal模式下使用冒号“:”进入底线命令模式。底线模式的替换命令如表3.7所示,其他底线命令如表3.8所示。
表3.7 底线模式的替换命令
注意: 斜杠“/”为分隔符,也可用@、#等代替。
表3.8 其他底线命令
4.冷知识
(1)vim能够编辑jar包。
在Windows下,很多工具可以不用解压缩war包、jar包就能进行编辑。如果Linux在部署服务时需要修改一些配置文件,也能在不用解压缩的情况下进行修改就十分方便了。除了普通文件,vim也能打开编辑jar包中的文件。但要注意,vim打开jar包需要与zip配合使用。
安装zip的命令如下:
如果没有安装zip,在保存时会出现如下报错:
打开jar包后如何修改配置文件呢?
jar包内容提示“Select a file with cursor and press ENTER”,意思是选中一个文件后,按“Enter”键即可修改配置文件。例如,先选中文件“META-INF/maven/run.halo.app/halo.maven/pom.xml”,然后按“Enter”键,使用vi进行编辑,编辑完成后,输入命令“:wq”保存并返回上层界面,最后输入命令“:q”退出。
(2)不可见字符的处理。
在Linux执行脚本时,可能会遇到“/bin/bash^M”或“坏的解释器:没有那个文件或目录”这样的错误。
这些错误的原因可能是这个脚本在Windows下被修改过,导致在Linux执行脚本时出现了无法识别或无法执行的特殊字符。这些特殊字符在3.3.1节中的cat命令选项中提到过。
在Windows下使用某些文件编辑器进行批量替换后,文件中会产生一些隐藏字符,其中ASCII码中的“\r”,在Windows下使用不影响。但上传到Linux后会出现“^M”这样的隐藏字符。使用“vi-b”命令可以查看这些隐藏字符。
注意 :^M需要使用“Ctrl+M”快捷键输入。
5.vim的命令总结
vi/vim模式切换如图3.1所示。
图3.1 vi/vim模式切换
● 输入命令“vi/vim[fileName]”,进入normal模式。
● 在normal模式下输入“i”“a”“o”“s”,进入编辑模式。
● 在normal模式下输入冒号“:”,进入底线命令模式。
● 按“Esc”键退出编辑模式,切换到normal模式。
● 输入命令“:q”“:wq”“:q!”“:wq!”退出保存/不保存文件。
最后,将vi/vim编辑器的增删改查功能编写了一个打油诗。
编辑常用i、a、o,前后插入不用愁。
移动文末大写G,到达文首小gg。
删除用ndd,撤销用u重复点(.)。
复制粘贴yyp,查找斜杠加问号。
要想替换怎么办,冒号(:)进入底线中。
%s打头阵,小g戳在最后头。
w保存q退出,强制执行感叹号(!)。
jar包也能来编辑,隐藏字符vi-b。
读者学习过vi/vim,再来学习more与less就非常容易。more与less是基于vi的文件查看工具。这两个文件查看工具的命令类似cat命令,不过是以一页一页的方式显示阅读的。
下面来看more命令是如何使用的。
1.more命令速查手册
more命令可以显示百分比。一般从头排查问题日志可以用more命令。
(1)more命令的语法格式:more[选项][文件]。
(2)more命令的常用选项如表3.9所示。
表3.9 more命令的常用选项
(3)more命令示例。
(4)more命令的常用内置命令如表3.10所示。
表3.10 more命令的常用内置命令
注意: 有些快捷键效果类似。干扰视听命令,不在此表中列出。可以在 more 命令打开的文件中使用h命令查看内置命令的帮助文档,也可以使用man more查看详细的帮助文档。
2.less命令速查手册
less的意思是less is more。它不是more的反义词,而是more的一个高级版本。less命令的优点是查看文件之前不会加载整个文件,只会将要查看的数据加载至内存中。less适合查看内存大的文件。例如,内存超过200MB或1GB的文件,都可以使用less命令,提高查看文件效率。
(1)less命令的语法格式:less[选项][文件]。
(2)less命令的选项说明如表3.11所示。
表3.11 less命令的选项说明
续表
(3)less命令示例。
(4)less命令的内置命令。
对于more命令的内置命令,less命令基本都有,且更为丰富,只是不能按“Ctrl+C”快捷键退出less命令。less命令的内置命令如表3.12所示。
表3.12 less命令的内置命令
下面讲解流文件编辑工具sed。
vim编辑器需要在文件内部进行编辑。如果想在文件底部添加一句话或一个参数,则需要经历如下过程:
这一整套步骤比较烦琐。那有没有简单一点的方法呢?这就用到本节所讲的sed(Stream Editor)编辑工具。
注意: cat、echo命令也有使用追加重定向符号的功能,可以将内容追加到文件底部,但不能编辑。
1.sed命令速查手册
sed命令可以在不打开文件的情况下对文件进行增删改查操作,通常用来在自动化脚本中对文件进行编辑。
(1)sed命令的语法格式:sed[选项][sed 内置字符命令][输入文件]。
(2)sed命令的选项说明如表3.13所示。
表3.13 sed命令的选项说明
(3)sed命令的内置字符命令如表3.14所示。
表3.14 sed命令的内置字符命令
sed命令相较于其他命令,在语法格式上多了一种内置字符命令。内置字符命令用于对文件进行增删改查等操作,与vim的内置命令不一样,并不在文件中使用。
2.sed命令实例演示
(1)准备一个测试文件。
(2)sed命令示例:增。
添加文本有两种命令,一种是文后追加“a”,另一种是文前插入“i”,分别是 append、insert的意思。
常用的追加命令如下:
实例演示如下:
其他追加命令如下:
(3)sed命令示例:删。
删除文本的内置命令字符“d”,命令如下:
注意: 选项“-i”的意思是直接修改文件内容。如果不用选项“-i”,则修改的内容只能输出到终端。磁盘中的文件不会被修改。
(4)sed命令示例:改。
修改的内置命令字符是“s”,命令如下:
(5)sed命令示例:查。
3.sed命令总结
sed命令的常用方法如下。
(1)语法格式:sed [参数选项][sed内置命令 更新内容][文件(可选)]。
(2)在没有-i参数时,只在终端显示修改后的内容,不修改真实文件内容。示例如下:
(3)内置命令字符i、a、s、d的功能分别为插入、追加、替换、删除。
(4)$代表文件末尾,^代表匹配一行文本的头部。示例如下:
(5)sed命令可以批量替换多文件内容。示例如下:
作为Shell的“三剑客”之一(另外两个是grep、awk),sed命令还有强大的功能待发掘,想要深入研究的读者可以自行探索。