vim文本替换
1、基础替换
:
进入命令模式s
(substitute)查找替换命令
%s/ok/ng/g 会在全局范围(%)查找ok并替换为ng
,作用范围内出现的目标都会被替换(g)。
针对光标当前所在行进行替换并且它只替换当前行中第一个匹配到的 abc
:s/abc/xyz/
针对光标当前所在行进行替换
:s/abc/xyz/g
全文替换
:%s/abc/xyz/g
或
:1,$s/abc/xyz/g 1 表示第一行,$ 表示最后一行。
指定其他行范围替换
:10,50s/abc/xyz/g 就表示只替换第 10 行到第 50 行中的 abc
2、转义替换
如果想将当前行里所有的“S.”替换为“S->”,就需要用到转义符了,正确的写法是这样的:
:s/S\./S->/g
S.abc and S->bcd and S.aaa and S..abc
转化为
S->abc and S->bcd and S->aaa and S->.abc
此处因为点号“.”为特殊匹配符,在正则中表示单个字符,所以如果想匹配点号,就需要把“\”放在点号前面,表示取消点号的特殊意义。
3、2008-07-01 替换成‘2008-07-01’
:1,$s/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)/'\1'/g
:1,$s/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)/'\1'/g
aaa 2008-07-01 bbb
ccc 2008-07-12 aaa
替换成
aaa '2008-07-01' bbb
ccc '2008-07-12' aaa
第一个知识点:[0-9] 表示 0 到 9 之间的任一个数字,这是正则中表示数字集合的标准写法。
第二个知识点:{n} 表示将此符号前面的元素重复 n 遍,所以 [0-9]{4} 就表示一个四位数的数字。
第三个知识点:如果在匹配方案中用到了(),则表示要暂存括号中所匹配到的内容,
而 \1 表示替换为暂存的内容。在本例中,我们匹配的是 2008-07-01,
那么加了括号后就会被暂存起来,而在后面的 \1 处就会被替换过来,外面再加一对引号,就完成了!