0%

vi模式下进行字符串替换

在工作中碰到这样一个问题,如何在Linux中对文件内容进行全局替换。最常用是在vi模式下使用命令,使用方法如下文。

语法

1
[addr]s/源字符串/目的字符串/[option]

[addr]: 表示检索范围,省略时表示当前行。

1,20 :表示从第1行到20行;
% :表示整个文件,同“1,$”;
.,$ :从当前行到文件尾;

s :表示替换操作

[option]:表示操作类型

g 表示全局替换;
c 表示进行确认;
p 表示替代结果逐行显示(Ctrl + L恢复屏幕);
省略option时仅对每行第一个匹配串进行替换;
如果在源字符串和目的字符串中出现特殊字符,需要用”\”转义

示例

1
2
3
4
5
6
:s/vivian/sky/ 替换当前行第一个 vivian 为 sky
:s/vivian/sky/g 替换当前行所有 vivian 为 sky
:n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky
:n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky
:%s/vivian/sky/(等同于 :g/vivian/s//sky/)替换每一行的第一个 vivian 为 sky
:%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky