1. 命令概述
- 命令名称:
ed(英文全拼:editor)
- 核心功能:行编辑器,面向行的文本编辑器
- 主要用途:脚本编辑、批处理文本操作、系统维护
- 历史地位:Unix 系统最早的文本编辑器,是
vi、sed、grep等工具的基础
2. 语法格式
ed [选项] [文件]
3. 常用选项
| 选项 | 说明 |
|---|
-p | 设置命令提示符 |
-s | 静默模式,不显示字符数统计 |
-v | 详细模式 |
-G | 向后兼容模式 |
--help | 显示帮助信息 |
--version | 显示版本信息 |
4. 基本操作模式
(1) 命令模式
启动 ed后进入命令模式,输入命令操作文本:
ed file.txt
# 进入命令模式,显示字符数(如:123)
(2) 输入模式
使用 a、i、c命令进入输入模式,输入文本内容:
a
这是第一行
这是第二行
.
# 输入 . 结束输入模式
5. 常用命令详解
(1) 基本编辑命令
| 命令 | 说明 |
|---|
a | 在当前行后追加文本 |
i | 在当前行前插入文本 |
c | 替换当前行 |
d | 删除当前行 |
p | 打印当前行 |
n | 显示行号和内容 |
w | 保存文件 |
q | 退出编辑器 |
Q | 强制退出,不保存 |
(2) 行号操作
| 命令 | 说明 |
|---|
. | 当前行 |
$ | 最后一行 |
+n | 当前行后第 n 行 |
-n | 当前行前第 n 行 |
, | 所有行(1,$) |
; | 当前行到最后一行(.,$) |
(3) 查找和替换
| 命令 | 说明 |
|---|
/正则表达式/ | 向前查找 |
?正则表达式? | 向后查找 |
s/old/new/ | 替换当前行 |
s/old/new/g | 全局替换当前行 |
g/正则表达式/命令 | 对匹配行执行命令 |
(4) 文件操作
| 命令 | 说明 |
|---|
e 文件名 | 编辑新文件 |
r 文件名 | 读取文件到当前行后 |
w 文件名 | 写入文件 |
wq | 保存并退出 |
!命令 | 执行 shell 命令 |
6. 常用实例详解
(1) 基本编辑
# 打开文件
ed file.txt
# 显示所有内容
1,$p
# 显示前5行
1,5p
# 显示最后5行
-5,$p
# 显示第10行
10p
(2) 插入和追加
# 在第1行前插入
1i
这是新插入的第一行
.
# 在最后一行后追加
$a
这是追加的最后一行
.
# 在第5行后追加
5a
这是第5行后追加的内容
.
(3) 删除和替换
# 删除第3行
3d
# 删除第5到第10行
5,10d
# 删除所有包含"test"的行
g/test/d
# 替换第2行
2c
这是替换后的第2行
.
# 替换所有包含"old"的行
g/old/c
这是替换后的内容
.
(4) 查找和替换
# 查找包含"hello"的行
/hello/
# 向后查找包含"world"的行
?world?
# 替换当前行的第一个"old"为"new"
s/old/new/
# 替换当前行的所有"old"为"new"
s/old/new/g
# 替换所有行的"old"为"new"
1,$s/old/new/g
# 替换第5到第10行的"old"为"new"
5,10s/old/new/g
(5) 文件操作
# 保存文件
w
# 保存并退出
wq
# 强制退出,不保存
Q
# 读取另一个文件到当前行后
r other.txt
# 执行 shell 命令
!ls -l
7. 实际应用场景
场景一:脚本编辑
# 编辑脚本文件
ed script.sh
# 在文件开头添加 shebang
1i
#!/bin/bash
.
# 在文件末尾添加内容
$a
echo "脚本执行完成"
.
# 保存并退出
wq
场景二:配置文件修改
# 修改配置文件
ed /etc/nginx/nginx.conf
# 查找并替换配置项
g/listen 80;/s/80/8080/
# 添加新的配置块
$a
server {
listen 8080;
server_name localhost;
}
.
# 保存并退出
wq
场景三:日志处理
# 处理日志文件
ed log.txt
# 删除空行
g/^$/d
# 删除时间戳列
1,$s/^[0-9:-]* //
# 只保留错误日志
g/ERROR/p
# 保存处理后的日志
w clean_log.txt
场景四:批量文本操作
# 批量替换多个文件
for file in *.txt; do
ed -s "$file" <<EOF
1,\$s/old/new/g
w
EOF
done
# 批量删除空行
for file in *.log; do
ed -s "$file" <<EOF
g/^$/d
w
EOF
done
8. 与其他命令的区别
| 命令 | 特点 | 适用场景 |
|---|
ed | 行编辑器,面向命令 | 脚本编辑、批处理操作 |
vi | 屏幕编辑器,交互式 | 交互式文本编辑 |
sed | 流编辑器,非交互式 | 流式文本处理 |
nano | 简单易用的编辑器 | 快速编辑小文件 |
emacs | 功能强大的编辑器 | 编程、复杂编辑 |
9. 注意事项
- 命令模式:
ed始终在命令模式下,需要输入命令才能操作
- 输入模式:使用
a、i、c进入输入模式,输入 .结束
- 行号表示:
.表示当前行,$表示最后一行
- 正则表达式:支持基本正则表达式
- 错误处理:命令错误会显示
?,输入 h查看帮助
10. 常见问题解决
(1) 文件不存在
# 打开不存在的文件会创建新文件
ed newfile.txt
(2) 命令错误
# 输入错误命令显示 ?
?command
# 查看帮助
h
# 退出
q
(3) 批量操作
# 使用 here document 批量操作
ed -s file.txt <<EOF
1,\$s/old/new/g
w
EOF
(4) 静默模式
# 静默模式下不显示字符数统计
ed -s file.txt
核心要点总结:
ed是 Unix 系统最古老的行编辑器,是许多文本工具的基础
- 操作模式:命令模式(输入命令)和输入模式(输入文本)
- 常用命令:
a(追加)、i(插入)、d(删除)、s(替换)、w(保存)、q(退出)
- 实际应用:脚本编辑、配置文件修改、日志处理、批量文本操作
- 历史意义:是
vi、sed、grep等工具的前身,理解 ed有助于理解 Unix 文本处理哲学
ed命令虽然现在使用较少,但作为 Unix 文本处理的基础,具有重要的历史意义和教育价值。