无论是Linux的新手还是老手,掌握一些常用命令都是必不可少的,熟练使用它们可以大大提高工作效率,成为工作中的得力助手。本文是常用Linux命令汇总系列文章的第二篇,全面详细的展示了10个与文档编辑相关的命令。

一览表

序号命令简述分类
1cat连接与查看文件内容文档编辑
2more分页显示大文件文档编辑
3less功能强大的文本查看器文档编辑
4head查看文件开头部分文档编辑
5tail查看文件结尾部分文档编辑
6vim强大的文本编辑器文档编辑
7sed批量编辑文本文件文档编辑
8awk对文本和数据进行处理的编程语言文档编辑
9grep强大的文本搜索工具文档编辑
10diff比较文件内容差异文档编辑

1. cat 命令

cat 命令主要用于查看文件内容,也可将多个文件合并输出,还能创建新文件。它会一次性将文件的全部内容输出到标准输出设备(通常是屏幕)。

语法格式

1
cat [参数] 文件

常用参数

1
2
3
4
5
6
-n    显示行号,会在输出的每一行前加上行号
-b 显示行号,但只对非空行进行编号
-s 压缩连续的空行,只显示一个空行
-E 在每一行的末尾显示 $ 符号
-T 将 Tab 字符显示为 ^I
-v 显示一些非打印字符

实例

(1)显示指定文件内容并显示非空行的行号

1
cat -b file1

image-20241114164504779

(2)把文件A的非空白行内容加上行号,之后将其附加到文件B中

1
cat -b file2 >> file3

image-20240320165734429

注意

  • cat命令默认会一次显示整个文件,如果文件过大可能会导致终端卡顿
  • cat命令可以用来创建新的空文件,但不能编辑文件

2. more 命令

more 命令用于分页显示文件内容,每次显示一屏。当文件内容较多时,使用 more 可以逐屏查看,避免内容过多在屏幕上滚动过快而难以阅读。

语法格式

1
more [参数] 文件

常用参数

1
2
3
4
5
6
7
8
+n    从笫n行开始显示
-n 定义屏幕大小为n行
+/pattern 在每个档案显示前搜寻该字串(pattern),然后从该字串前两行之后开始显示
-c 从顶部清屏,然后显示
-d 提示“Press space to continue,’q’ to quit(按空格键继续,按q键退出)”,禁用响铃功能
-l 忽略Ctrl+l(换页)字符
-s 把连续的多个空行显示为一行
-u 把文件内容中的下画线去掉

操作命令

1
2
3
4
5
<回车键>    向下n行,需要定义。默认为1行
<空格键> 向下滚动一屏
<Ctrl> + B 返回上一屏
= 输出当前行的行号
q 退出more

实例

(1)显示指定文件内容并从第 5 行开始显示

1
more +5 file1

image-20241114171900559

(2)从文件中查找第一个出现 34 字符串的行,并从该处前两行开始显示输出

1
more +/34 file1

image-20241114172040667

(3)设定每屏显示行数为 5

1
more -5 file1

image-20241114172319103

3. less 命令

less 功能更强大,支持向前和向后翻页,在文件中进行搜索,并且可以在查看文件时不加载整个文件到内存,对于非常大的文件更加高效。

语法格式

1
less [参数] 文件

常用参数

1
2
3
4
5
6
7
8
9
10
11
12
-b <缓冲区大小>    设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格

操作命令

1
2
3
4
5
6
7
8
9
10
/字符串    向下搜索"字符串"的功能
?字符串 向上搜索"字符串"的功能
b 向上滚动一页
u 向上滚动半页
y 向上滚动一行
<空格键> 向下滚动一页
d 向下滚动半页
<回车键> 向下滚动一行
h 显示帮助界面
q 退出less

实例

(1)ps 查看进程信息并通过 less 分页显示

1
ps -ef |less

image-20241114173653083

(2)浏览多个文件

1
less file1 file2

提示:输入 :n 切换到下一个文件,输入 :p 切换上一个文件

image-20241114174041626

4. head 命令

head 命令用于显示文件的开头部分内容。默认情况下会显示文件的前 10 行内容。

语法格式

1
head [参数] 文件

常用参数

1
2
3
4
-q    隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数
-n<行数> 显示的行数

实例

(1)显示指定文件的前 13 行

1
head -n 13 file1

image-20241114174815384

(2)显示指定文件除最后 39 行外的全部内容

1
head -n -39 file1

image-20241114175131721

(3)显示指定文件的前 100 个字节

1
head -c 100 file1

image-20241114175344903

5. tail 命令

tail 命令用于显示文件的结尾部分内容。默认情况下会显示文件的最后 10 行内容。

语法格式

1
tail [参数] 文件

常用参数

1
2
3
4
5
6
7
8
-f    循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示的行数
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

实例

显示指定文件的后 13 行

1
tail -n 13 file1

image-20241114175550073

6. vim 命令

vim 是强大的文本编辑器,支持多种操作模式,包括命令模式、输入模式和命令行模式。

语法格式

1
vim 文件

操作模式

  • 命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等
  • 输入模式:正常的文本输入
  • 命令行模式:保存或退出文档,以及设置编辑环境

image-20241119201558539

1. 命令模式

用户启动 vim 便进入了命令模式,此状态下敲击键盘动作会被 vim 识别为命令,而非输入字符,比如按下 iao 就进入了输入模式,而按下 : 就进入了命令行模式。

1
2
3
4
5
6
7
8
9
10
11
i    切换到输入模式,在光标当前位置开始输入文本
a 切换到输入模式,在光标下一个位置开始输入文本
o(小写) 在当前行的下方插入一个新行,并进入输入模式
O(大写) 在当前行的上方插入一个新行,并进入输入模式
dd 剪切当前行
yy 复制当前行
p(小写) 粘贴剪贴板内容到光标下方
P(大写) 粘贴剪贴板内容到光标上方
u 撤销上一次操作
<Ctrl> + r 重做上一次撤销的操作
: 切换到命令行模式,以在最底一行输入命令

2. 输入模式

在输入模式中用户可以随意修改文本内容,当编写完成后可以使用 <ESC> 返回命令模式,进行其它操作。

1
2
3
4
5
6
<ENTER>    回车键,换行
<BACK SPACE> 退格键,删除光标前一个字符
<DELETE> 删除键,删除光标后一个字符
<HOME>/<END> 移动光标到行首/行尾
<Page Up>/<Page Down> 上/下翻页
<ESC> 退出输入模式,切换到命令模式

3. 命令行模式

在命令模式下按下 : 就进入了命令行模式,在命令行模式通过输入单个或多个字符的命令来实现丰富与连贯的操作。

1
2
3
4
5
6
:w    保存文件
:q 退出 Vim 编辑器
:wq 保存文件并退出 Vim 编辑器
:q! 强制退出 Vim 编辑器,不保存修改
:set nu (变量变更)显示行号
:set nonu (变量变更)取消行号

实例

使用 vim 打开指定文件

1
vim file1

image-20241114203405731

7. sed 命令

sed 是一种流编辑器,用于对文本进行非交互式的编辑操作,可以进行文本的替换、删除、插入等操作。

语法格式

1
sed [参数] [事件] 文件

常用参数

1
2
-e    以选项中指定的事件处理输入的文本文件
-n 仅显示事件处理后的结果

事件动作

1
2
3
4
5
6
a    新增,a的后面接字串,字串在下一行出现
c 取代,c的后面接字串,字串替换n1,n2之间的行
d 删除,删除行,d的后面通常不接字串
i 插入,i的后面接字串,字串在上一行出现
p 打印,将某个选择的数据输出,通常与参数 -n 一起运行
s 取代,通常搭配正则表达式

实例

(1)在指定文件第 6 行后添加一行,并将结果输出到标准输出设备

1
sed -e 6a跟在第6行后的一行 file1

image-20241114232322949

(2)在指定文件中搜索包含 13 的行并输出

1
sed -n 13p file1

image-20241114235444697

(3)替换指定文件中的内容更改为新内容

1
sed -e s/13/130/ file1

image-20241115000631362

8. awk 命令

awk 是一种用于处理文本文件的语言,它以行为单位处理文件内容,可以进行复杂的数据提取和分析。

语法格式

1
awk [参数] [处理规则] 文件

常用参数

1
2
3
-F <分隔符>    指定输入字段的分隔符,默认是空格
-v <变量名>=<值> 设置内部变量值。可以使用该选项将外部值传递给 awk 脚本中的变量
-f <脚本文件> 指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载

内置变量

1
2
3
4
5
$0    保存当前行的内容
NR 记录号(行号),每处理完一条记录,NR值加1
NF 保存记录的字段数(总共保存的列数),$1,$2...$100
FS 输入字段分隔符,默认空格
OFS 输出字段分隔符

处理规则

1
2
3
4
BEGIN{}    BEGIN是在awk处理文本之前运行
// 使用的匹配规则
{} 循环(每次只处理一行数据)
END{} 当所有的处理全部执行完毕之后,执行END中的相关操作

实例

(1)打印指定文件内容的第一列

1
awk '{print $1}' file3

image-20241119115814152

(2)打印指定文件内容的第一列,并用分隔符指定列

1
awk -F':' '{print $1}' file3

image-20241119115951010

(3)打印指定文件内容的行数

1
awk 'END{print NR}' file3

image-20241119120225590

9. grep 命令

grep 命令用于在文件中搜索指定的模式。它可以搜索单个文件或多个文件,并输出包含匹配模式的行。

语法格式

1
grep [参数] 模式 文件

常用参数

1
2
3
4
5
6
-i    忽略大小写进行匹配
-v 反向查找,只打印不匹配的行
-n 显示匹配行的行号
-r 递归查找子目录中的文件
-l 只打印匹配的文件名
-c 只打印匹配的行数

实例

(1)在指定文件中搜索包含特定字符串的行

1
grep "/bin" file3

image-20241119121130878

(2)使用递归查找指定目录下所有文件包含指定字符串的行

1
grep -r "12" /linux

image-20241119121641346

10. diff 命令

diff 用于比较两个文件的差异。它会显示两个文件中不同的行,并可以以不同的格式输出差异信息。

语法格式

1
diff [参数] 文件1 文件2

常用参数

1
2
3
4
5
6
7
-u    显示完整的差异内容
-w 忽略空格和空行的差异
-r 递归比较目录下的所有文件和子目录
-q 仅判断两个文件是否不同,而不显示文件内容的差异
-c 显示上下文差异
-i 忽略大小写的差异
-y 以并列的方式显示差异内容

实例

(1)比较两个文件的差异

1
diff file1 file4

image-20241119125830112

(2)比较两个文件的差异,并以并列的方式展示差异

1
diff -y file1 file4

image-20241119130202656