全局搜索和替换
vi 使用 ex 命令对一系列行或整个文件执行搜索和替换操作(在 vi 中称为“替换”)。 要将整个文件的“行”一词更改为“行”,我们将输入以下命令:
:%s/行/行/g
:%s/行/行/g
让我们把这个命令分解成单独的项目,看看每个项目的作用:
表 12- 5:全局搜索替换语法示例
项目 含义
项目 含义
: 冒号字符开始 ex 命令。
% 指定操作的行范围。 % 是从第一行到最后一行的快捷方式。 或者,可以指定范围 1,5 (因为我们的文件有五行长),或 1,$ 这意味着“从文件中的第 1 行到最后一行”。 如果省略行范围,则只对当前行进行操作。
搜索和替换
s 指定操作。 在这种情况下,替换(搜索和替换)。
/Line/line/ 搜索模式和替换文本。
g 这意味着“全局”,因为搜索和替换是在行中搜索字符串的每个实例上执行的。 如果省略,则仅替换每行上搜索字符串的第一个实例。
执行我们的搜索和替换命令后,我们的文件如下所示:
敏捷的棕色狐狸跳过了懒惰的狗。 这很酷。 2号线
行3
行4
行5
敏捷的棕色狐狸跳过了懒惰的狗。 这很酷。 2号线
行3
行4
行5
我们还可以在用户确认的情况下指定替换命令。 这是通过在命令末尾添加“c”来完成的。 例如:
:%s/行/行/gc
:%s/行/行/gc
这个命令会将我们的文件改回原来的形式; 然而,在每次换人之前, vi 停止并要求我们使用以下消息确认替换:
替换为 Line (y/n/a/q/l/^E/^Y)?
替换为 Line (y/n/a/q/l/^E/^Y)?
括号内的每个字符都是一个可能的选择,如下所示:
表 12-6:更换确认键
关键行动
关键行动
y 执行替换。
n 跳过此模式实例。
a 对模式的这个和所有后续实例执行替换。
q 或 Esc 退出替代。
l 执行此替换然后退出。 “最后”的缩写。
Ctrl-e、Ctrl-y 分别向下滚动和向上滚动。 用于查看建议替换的上下文。
如果您输入 y,将执行替换, n 会引发 vi 跳过此实例并转到下一个实例。