ed (英文全称为:editor)命令是一个行文本编辑器,它有命令模式和输入模式两种工作方式,命令模式用于输入一些命令后,根据命令对文本执行相应的操作,而输入模式是向文本中输入内容,ed 命令所有的操作都是在缓冲区内完成,当执行保存命令时,把内容写如文件。

ed 是按行编辑内容,这点一定要注意。如下将为你详细介绍 ed 命令的使用方法。

命令语法

ed 命令的基本语法结构如下所示:

ed [选项] [文件]

解释说明:

  • 选项:用于控制 ed 编辑器行为的参数
  • 文件:需要编辑的文件

ed 命令使用示例

使用 ed 命令编辑文件,执行命令后,首先提示的信息是从文件读入缓冲区的字节数。

编辑文件

不适用任何选项,指定文件名编辑文件:

ed myfile.txt

自定义命令提示符

使用 -p 字符串 选项可以自定义命令提示符,默认没有设置命令提示符:

ed -p '> ' myfile.txt

如上命令把命令提示符设置为 >

注意:命令提示符是字符串,要用引号包裹

ed 命令交互指令详解

ed 命令怎么使用,关键还是要了解这些交互指令,了解了交互指令,你才算是真正的学会了使用 ed 命令。

行选择与当前行计算

当前行的计算与行的选择有关,如下给出他们之间的关系:

字符表示形式 描述 当前行
. 表示当前行 不改变当前行
$ 表示最后一行 当前行设置为最后一行
n 表示第 n 行 当前行设置为第 n 行
m,n 从 m 行到第 n 行 当前行设置为第 n 行
m;n 从 m 行到第 n 行 当前行设置为第 n 行
, 省略了前后的 m n,表示从 1 行到最后一行 当前行设置为最后一行
; 省略了前后的 m n,表示从当前行到最后一行 当前行设置为最后一行

命令模式下的显示命令

命令 描述 示例
<行选择符>p (print) 用于显示指定的行,单独使用时显示当前的行 2,5p 显示第 2 到第 5 行
<行选择符>n (number) 用于显示指定的行,同时还会显示行号 2,5n 显示第 2 到第 5 行及其行号
. 显示当前行的内容 .
$ 显示最后一行的内容 .
= 显示总行数 =

进入输入模式

进入输入模式需要使用特定命令,需要使用提供的编辑命令当中的一部分:

命令 描述 示例
<行号>a (append) 进入输入模式,在指定行号的后面添加内容,单独使用时在当前行的后面添加内容 5a 在第 5 行的后面添加内容
a 在当前行的后面添加内容
<行号>i (insert) 进入输入模式,在指定行号的前面添加内容,单独使用时在当前行的前面添加内容 5i 在第 5 行的前面添加内容
i 在当前行的前面添加内容
<行号>c (change) 进入输入模式,更改指定行号的内容,单独使用时更改当前行的内容 5c 更改第 5 行的内容
c 更改当前行的内容

退出输入模式

在输入模式下,另起一行,输入 .,按 Enter 键,退出输入模式,进入命令模式

文件操作命令

命令 描述 示例
e <file> (edit) 重新编辑一个新文件,在读入新文件前会清空缓冲区,如果未保存会警告,后附附加 ! 强制执行 e file1.txt
e! file2.txt
<行号>r <file> (read) 读入另一个文件的内容,添加在指定行号的后面,单独使用时添加在当前行的后面 5r file1.txt 在第 5 行的后面添加读入的文件内容
$r file2.txt 在最后一行的后面添加读入的文件内容
w <file> (write) 保存内容到指定的文件(即:把缓冲区中的内容写入文件),单独使用时,保存到源文件 w file1.txt
w
W <file> (write 大写形式) 把内容添加到指定的文件的后面(即:把缓冲区中的内容写入文件) W file1.txt
<行选择符>d (delete) 用于删除指定的行 2,5d 删除第 2 到第 5 行
<行选择符>s (substitute) 使用正则表达式查找替换指定行中的内容 2,5s/^/#/ # 在第1到第5行的行首添加 '#'(注释掉)
<行选择符>m<行号> (move) 把选择的行内容移动到指定行的后面 2,5m10 # 把第 2到第 5 行移动到第 10 行的后面
<行选择符>t<行号> (transfer) 把选择的行内容复制到指定行的后面 2,5m10 # 把第 2到第 5 行复制到第 10 行的后面

搜索命令

命令 描述 示例
/pattern/ 从头向尾,搜索匹配正则表达式 pattern 的内容 /hello/
?pattern? 从尾向头,搜索匹配正则表达式 pattern 的内容 ?hello?

退出与其他命令

命令 描述
q (quit) 退出编辑器,需要先保存内容
Q (quit) 不保存内容,强制退出编辑器
H (Help) 切换信息的显示模式
! 执行一个外部命令,如:!ls -l

ed 命令选项详解

在 ed 命令中支持以下这些选项:

选项 描述
-G, --traditional 运行兼容模式,兼容旧版本的功能
-s, --quiet, --silent 不显示命令启动时的对文本执行的诊断信息,该选项在脚本中经常使用
-p 字符串 用于指定自定义的命令提示符,命令提示符就是命令模式下,输入命令时一直显示的内容,用于提示输入命令,默认没有命令提示符,例如可以设置: -p '> '
-h, --help 显示帮助信息并退出。
-V, --version 显示版本信息并退出。
-l, --loose-exit-status 忽略推出状态,即使命令失败,也以状态零(正常终止)退出
-r--restricted 在受限模式下运行
-v, --verbose 显示详细操作信息

ed 命令安装说明

虽然绝大多数 Linux 和 Unix 发行版(包括 FreeBSD)都默认安装了 ed,但某些极简环境或容器中可能没有。如果系统中默认没有安装该命令,以下是在不同系统下的安装方法:

在很多系统上可能默认没有安装 ed 编辑器,需要使用的话,需要自行安装:

  1. 在 Debian / Ubuntu 系统上使用如下命令安装 ed 编辑器:

bash sudo apt update sudo apt install ed

  1. 在 RHEL / CentOS / AlmaLinux / Rocky Linux 系统上使用如下命令安装 ed 编辑器:

bash # 对于较新版本(RHEL/CentOS 8+, AlmaLinux, Rocky Linux),使用 dnf sudo dnf install ed

  1. 在 FreeBSD系统上使用如下命令安装 ed 编辑器:

bash # 使用 pkg 安装 sudo pkg install ed # 或者使用 ports 编译安装(需先进入 ports 目录) # cd /usr/ports/editors/ed/ && sudo make install clean

结语

ed 是一个行编辑器,它的功能没有 vim 编辑器功能强大,但是很多编辑器受它启发而开发。在本文中,我们讲解了 ed 编辑器的基本语法,最重要的是给出了其交互命令的详细解释说明,并给出一些使用示例。本文已经非常详细,足够你学习使用。

ed 命令可以跨平台使用,你能够在 Linux 各发行版和 FreeBSD 系统上同时使用它。