Linux 常用文本编辑器
文本编辑器是操作系统基础的功能软件之一。根据使用环境的不同,Linux 的文本编辑器有很多类型。
emacs
emacs 是一款功能强大的编辑器,与其说是一款编辑器,它更像一个操作系统。emacs 带有内置的网络浏览器、IRC 客户端、计算器,甚至是俄罗斯方块。当然,emacs 需要在图形化界面的 Linux 中使用。
优点:
- 可定制,可扩展;
- 功能强大;
- 可以与许多自由软件编程工具集成。
缺点:
- 入门难度高,对普通用户不友好。
nano
nano 是命令行界面下一个相对简单的文本编辑器,它是为了代替闭源的 Pico 文本编辑器而开发的,1999 年以 GPL 协议发布第一个版本,是一个自由软件,同时也是 GNU 计划的一个组成部分。nano 有很多人性化的功能设计,如语法高亮、正则表达式搜索和替换、平滑滚动、多个缓冲区、自定义快捷键、撤销或重复编辑。
优点:
- 易于使用,操作简单,适用于简单文本编辑。
缺点:
- 对复杂的文本编辑比较耗时,无强大的命令功能进行复杂操作,不支持如宏、一次编辑多个文件、窗口分割、垂直块、矩形选择、编辑、自动完成等高级功能。
gedit
gedit 是一个 GNOME 桌面环境下兼容 UTF-8 的文本编辑器。它简单易用,有良好的语法高亮,对中文支持很好,支持包括 GB2312、GBK 在内的多种字符编码。gedit 是一款自由软件。gedit 包含语法高亮和标签编辑多个文件的功能。利用 GNOME VFS 库,它还可以编辑远程文件。它支持完整的恢复和重做系统以及查找和替换。
优点:
- 图形化界面,易上手,操作习惯与 Windows 类似,包括常用的快捷键如复制粘贴等。
缺点:
- 需要安装图形化桌面才能使用。
kedit
与 gedit 类似,kedit 是 KDE 图形化桌面中常用的一种文本编辑器。kedit 是一个非常小的编辑器,特别适用于浏览文本和各种配置文件。
优点:
- 图形化界面,易上手,操作习惯与 Windows 类似,包括常用的快捷键如复制粘贴等。
缺点:
- 需要安装图形化桌面才能使用。
vi
vi 是标准的 Unix 文本编辑器,也是最古老的文本编辑器、最通用的文本编辑器。所有的 Linux、Unix 都默认带有 vi 文本编辑器。虽然 vi 的操作方式与其他常用的文本编辑器(如 gedit)很不相同,但是由于其运行于字符界面,并可用于所有 unix/linux 环境,目前仍被经常使用。
vi 的三种命令模式:
- Command:命令模式,用于输入命令;
- Insert:插入模式,用于插入文本;
- Visual:可视模式,用于浏览文本。
优点:
- 通用,几乎所有的 Unix、Linux 都自带 vi。
缺点:
- 功能简单,显示效果单一。
vim
Vim 是从 vi 发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器。
Vim 的第一个版本由布莱姆·米勒在 1991 年发布。最初的简称是 Vi IMitation,随着功能的不断增加,正式名称改成了 Vi IMproved。现在是在开放源代码方式下发行的自由软件。
Vim 编辑器中设置了三种模式:命令模式、末行模式和编辑模式。
- 命令模式:可以控制光标移动,可以对文本进行复制、粘贴、删除等操作。
- 输入模式:可以进行正常的文本录入。
- 末行模式:保存或者退出文件以及设置编辑环境。
可以使用快捷键在这三种模式之间切换。

使用 vim 编辑器
vim 编辑器的语法:
vim [选项] 文件名选项:
- -c:打开文件前执行指定的命令。
- -R:以只读方式打开文件,可以强制保存文件。
- -M:以只读方式发开文件,不能强制保存文件。
- +num:从第 num 行开始阅读文件。
模式切换命令:
| 快捷键 | 作用 | 快捷键 | 作用 |
|---|---|---|---|
| 【a】 | 在光标所在字符后插入内容。 | 【A】 | 在光标所在行尾插入内容。 |
| 【i】 | 在光标所在字符前插入内容。 | 【I】 | 在光标所在行首插入内容。 |
| 【o】 | 在光标下插入新行。 | 【O】 | 在光标上插入新行。 |
| 【ESC】 | 退出到命令行模式 | 【:】 | 切换到末行模式 |
命令模式操作
使用 vim 打开文件,如果文件存在会直接打开,如果文件不存在,则会在文件末尾提示[New],并且在第一次保存文件时完成文件创建。打开文件后默认进入到命令模式,可以在该模式下执行一些命令和操作。
移动光标
| 快捷键 | 作用 | 快捷键 | 作用 |
|---|---|---|---|
| 【上下左右键】 | 上下左右移动光标 | 【k】、【j】、【h】、【l】 | 上、下、左、右移动光标 |
| 【0】 | 移动到行首 | 【g0】 | 移动光标到所在屏幕行首 |
| 【gg】 | 移动光标到文件头部 | 【G】 | 移动光标到文件末尾 |
| 【$】 | 移动至行尾 | 【^】 | 移动至行首 |
数据操作
| 快捷键 | 作用 | 快捷键 | 作用 |
|---|---|---|---|
| 【dd】 | 删除(剪切)光标所在行 | 【yy】或【Y】 | 复制光标所在行 |
| 【5dd】 | 删除(剪切)光标所在行开始的 5 行 | 【5yy】 | 复制光标所在行开始的 5 行 |
| 【u】 | 撤销上一步操作 | 【p】/【P】 | 粘贴复制或剪切的内容到光标后面/前面 |
末行模式操作
在命令模式按【:】键,可以切换到末行模式,在末行模式可以执行一些指令。
保存与退出
| 操作 | 作用 | 操作 | 作用 |
|---|---|---|---|
| 保存 | 不保存退出 | ||
| 保存并退出 | ! | 强制保存并退出 | |
| 【ZZ】 | 保存并退出 | ! | 强制退出不保存 |
行号显示与取消
设置行号::set nu,取消行号::set nonu。
查找与替换
| 操作 | 作用 | 操作 | 作用 |
|---|---|---|---|
| /old/new/ | 将光标所在行的第一个 old 替换为 new。 | /old/new/g | 将光标所在行的所有 old 替换为 new。 |
| ,5s/old/new/g | 将 1~5 行中所有的 old 替换为 new。 | :%s/old/new/g | 将全文的所有 old 替换为 new。 |
| /old/new/gi | 将全文的所有 old 替换为 new,不区分大小写。 | ?字符串 | 在文本中从下至上搜索字符串。 |
| /字符串 | 在文本中从上至下搜索字符串。 | 【n】/【N】 | 向前/向后搜索关键字符串。 |
| ,n 为数字 | 跳转至 n 行。 | 执行该命令 |
操作示例
vim 自带了一个交互式的教程,里面包含了最基础的信息,可以通过执行vimtutor命令打开教程。
[root@ictstu ~]# vimtutor
编辑一份笔记
使用 vim 命令打开一个名为 ictstunote.txt 的文件。
[root@ictstu ~]# vim ictstunote.txt
文件如果不存在,文件末尾则会显示[New]。

此时输入内容是没有反应的,需要按下【a】、【i】、【o】中的任意一个按键,切换到输入模式,按完以后底部提示字样会切换为”—INSERT—”。

此时可以向文件内随意输入内容。

如果需要保存内容,则需要先按下【ESC】键切换到命令行模式再按下【:】键,切换到末行模式,并输入:wq,保存文件并退出。


文本处理
查看文件
查看文件可以使用之前学到的 cat、head、tail、more、less 等命令完成。
stat
stat 命令用户查看文件的具体存储细节和时间等信息。
语法:
stat 文件示例:
① 查看 passwd 文件的信息。
[root@ictstu ~]# stat passwd
提取列或字段
1. awk
awk 是一个强大的文本分析工具,简单来说 awk 就是把文件或者标准输入逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。命令的名字来源于 Alfred Aho、Peter Weinberger、Brian Kernighan 三位创始人的姓氏缩写。
语法:
awk [选项] 文件名选项:
- -F 字符串:指定以字符串作为输入行的分隔符,默认使用空格或制表符作为分隔符。
示例:
① 提取 passwd 文件的第一列数据。
[root@ictstu ~]# awk -F ":" '{print $1}' passwd
② 提取 passwd 文件第一和第三列的数据。
[root@ictstu ~]# awk -F ":" '{print $1,$3}' passwd
③ 提取 passwd 文件中前三个字符。
[root@ictstu ~]# awk '{print substr($0, 1, 3)}' passwd
2. cut
cut 命令用于按列提取文件内容。
语法:
cut [选项] 文件名选项:
- -d:设置分隔符。
- -c:以字符为单位进行分割。
- -f:显示指定字段的内容。
示例:
① 提取 passwd 文件的第一列数据。
[root@ictstu ~]# cut -d ":" -f 1 passwd
② 提取 passwd 文件第一和第三列的数据。
[root@ictstu ~]# cut -d ":" -f 1,3 passwd
③ 提取 passwd 文件中前三个字符。
[root@ictstu ~]# cut -c 1-3 passwd
提取关键字
grep
grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
语法:
grep [选项] 文件选项:
- -c:统计符合样式的行数。
- -i:忽略大小写。
示例:
① 查找 passwd 文件中包含 root 字符串的行。
[root@ictstu ~]# grep root passwd
② 查找 passwd 文件中包含 user 字符串的行,不区分大小写。
[root@ictstu ~]# grep -i user passwd
③ 统计 passwd 文件中包含 user 字符串的行有多少行,不区分大小写。
[root@ictstu ~]# grep -c -i user passwd
文本统计
wc
wc 命令用于计算字数。利用 wc 指令可以计算文件的字节数、字数、或是列数,若不指定文件名称、或是所给予的文件名为”-“,则 wc 指令会从标准输入设备读取数据。
语法:
wc [选项] 文件选项:
- -c:只显示字节数。
- -l:只显示行数。
- -w:只显示字数。
示例:
① 统计 passwd 文件中的单词数量。
[root@ictstu ~]# wc -w passwd
② 统计 passwd 文件的字节数。
[root@ictstu ~]# wc -c passwd
③ 统计 passwd 文件的行数。
[root@ictstu ~]# wc -l passwd
文本排序
sort
sort 命令可以将文件进行排序,并将排序结果标准输出。sort 命令既可以从特定的文件,也可以从 stdin 中获取输入。
语法:
sort [选项] 文件选项:
- -b:忽略每行前面开始的空格字符。
- -c:检查文件是否已经按照顺序排序。
- -d:排序时,处理英文字母、数字及空格字符外,忽略其他字符。
- -f:排序时,将小写字母视为大写字母。
- -n:依照数值的大小排序。
- -r:以相反的顺序排序。
- -o <文件>:将排序后的结果存入指定的文件。
- -u:忽略相同行。
示例:
① 按照字母顺序对 passwd 文件内容进行排序。
[root@ictstu ~]# sort passwd
② 以冒号(:)为间隔符,对 passwd 文件内容按照数字大小对第 3 列进行排序。
[root@ictstu ~]# sort -t : -k 3 -n passwd
文本比较
diff
diff 命令以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。
语法:
diff [选项] 文件1 文件2选项:
- -B:不检查空白行。
- -c:显示全部内文,并标出不同之处。
- -i:忽略大小写的不同。
- -r:比较子目录中的文件。
- -w:忽略全部的空格字符。
示例:
① 比较 passwd 文件和 password 文件的内容有何不同。
[root@ictstu ~]# diff passwd password
文本操作
1. tr
tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备,常用于转换或删除文件中的字符。
语法:
tr [选项] 字符串1 字符串2选项:
- -c:反选设定字符,也就是符合 set1 的部分不做处理,不符合的剩余部分才进行转换。
- -d:删除字符。
- -s 缩减连续重复的字符成指定的单个字符。
示例:
① 将 passwd 文件中的小写全部替换为大写并输出到终端。
[root@ictstu ~]# tr [a-z] [A-Z] < passwd
2. sed
相比较 tr,sed 可以修改字符串。sed 是一种在线编辑器,可以对来自文件、以及标准输入的文本进行编辑。执行时,sed 会从文件或者标准输入中读取一行,将其复制到缓冲区,对文本编辑完成之后,读取下一行直到所有的文本行都编辑完毕。所以 sed 命令处理时只会改变缓冲区中文本的副本,如果想要直接编辑原文件,可以使用-i 选项或者将结果重定向到新的文件中。
语法:
sed [选项] 文件名选项:
- -n:取消默认输出。
- -e:多点编辑,可以执行多个子命令。
- -f:从脚本文件中读取命令。
- -i:直接编辑原文件。
- -l:指定行的长度。
- -r:在脚本中使用扩展表达式
示例:
① 将 passwd 文件中的 root 替换为大写的 ROOT。
[root@ictstu ~]# sed 's/root/ROOT/g' passwd
② 读取 passwd 文件的第 5~8 行。
[root@ictstu ~]# sed -n '5,8p' passwd
3. uniq
uniq 命令用于去除文件中连续的重复行。
语法:
uniq 文件示例:
① 去除 password 文件中的重复行。
[root@ictstu ~]# uniq password
4. dd
dd 命令用于按照指定大小和个数来复制文件或转换文件。
语法:
dd if=参数值 of=参数值 count=参数值 bs=参数值说明:
- if:输入的文件名称。
- of:输出的文件名称。
- count:要复制”块”的个数。
- bs:要复制”块”的大小。
示例:
① 生成一个大小为 500MB 的新文件 news。
[root@ictstu ~]# dd if=/dev/zero of=news count=1 bs=500M
② 复制 passwd 文件的前 100 个字节到 news1。
[root@ictstu ~]# dd if=passwd of=news1 count=1 bs=100
本文至此结束。
【1】openEuler 官方社区文档:https://docs.openeuler.org/zh
【2】刘遄·《Linux 就该这么学》(第 1 版)(第 2 版)·人民邮电出版社
【3】广然笔记:https://www.grbj.cn