当在文件中搜索要替换的模式时,可以让linux vi 编辑器把要匹配的任何模式保存在缓冲区中;然后,在执行替换时,可以用缓冲区引用号重放它们。方法是把模式放在 \(
和 \)
之间,这会指示 vi 把模式放在编号的缓冲区(1 到 9)中。在执行替换时,可以用缓冲区引用号 \1
到 \9
引用这些缓冲区。
例如,假设要在文件中搜索以单词 Martin 开头的行并对每个匹配添加前缀 Mr 和后缀 Wicks,那么进入命令模式,输入 vi 命令:%s/^\(Martin\)/Mr \1 Wicks/g
,然后按回车。
重放搜索模式(之前)
Martin is an IT consultant. Martin likes snowboarding and mountain biking. Martin has worked on UNIX systems for over 15 years. Martin also worked for many years before that on mainframes. Martin lives in London. ~ ~ ~ ~ :%s/^\(Martin\)/Mr \1 Wicks/g
下面把这个命令分解开解释一下:
:%s
— 指示 vi 执行替换。/
— 模式分隔符。^\(Martin\)
— 寻找以字符串Martin
开头的行并把这个字符串保存在缓冲区 1 中。/
— 模式分隔符。Mr \1 Wicks
— 把找到的字符串替换为字符串Mr
,加上缓冲区 1 中的内容,再加上字符串Wicks
。/
— 模式分隔符。g
— 全局修改(即修改所有匹配的地方)。
在搜索和替换字符串中都可以使用缓冲区引用。
修改的结果:
重放搜索模式(之后)
Mr Martin Wicks is an IT consultant. Martin likes snowboarding and mountain biking. Martin has worked on UNIX systems for over 15 years. Martin also worked for many years before that on mainframes. Mr Martin Wicks lives in London. ~ ~ ~ ~ :%s/^\(Martin\)/Mr \1 Wicks/g