vi中的替换方法是很实用,可以提高效率的。所有替换方案都要在冒号“:”状态下书写。
1、将abc替换为xyz
:s/abc/xyz/
PS:这个替换只局限于光标所在当前行,而且更糟糕的是它只替换当前行的第一个匹配项。
即,如果此行内容为I write abc, I read xyz and abc. 那么替换后的结果为I write xyz, I read xyz and abc.
2、将一行里的所有匹配都进行替换
:s/abc/xyz/g
3、将一行里所有的”S.”替换为”S->”
:s/S\./S->/g
PS:此处因为点号“.”为特殊匹配符,所以如果想匹配点号,就需要用\放在点号前面,表示取消点号的特殊意义。
即,此行S.abc and S->bcd and S.aaa,替换后为S->abc and S->bcd and S->aaa
4、要替换全文的S.为S->,则可以用行数来限制
:1,$s/S\./S->/g
PS:在s前面加上m,n则表示行的范围,1表示第一行,$表示最后一行。当然你完全可以指定其他行数。
m或n可以用特殊符号”.”或”$”代表,”.”代表当前行,”$”代表最后一行
如果是确定为全文替换,那么可以用%来代替1,$
即:%s/S\./S->/g
5、用#或者其他任何符号来替换/
当你要匹配一个https://yangfannie.com会很麻烦,因为//符号和/符号都会把替换搞乱。此时,你完全可以用#或者其他任何符号来替换/,如s/abc/xyz/可以替换为s#abc#xyz#,或者s!abc!xyz!都是可以的
下面使用了#符号替换
:s#http://yangfannie\.com#http://www\.baidu\.com#
即,此行https://yangfannie.com and http:/abc/efg,替换后为http://www.baidu.com and http:/abc/efg
6、把具有日期格式(XXXX-XX-XX)的字符串两侧加上一对单引号,即2015-09-28变成’2015-09-28’
:1,$s/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)/’\1’/g
PS:
a:[0-9]表示0到9之间的任一个数字
b:\{n\}表示将此符号前面的元素重复n遍,所以[0-9]\{4\}就表示一个四位数的数字
c:如果在匹配方案中用到了\(\)则表示要暂存这个匹配内容,而\1就表示要替换为暂存的匹配内容,我们匹配的如果是2015-09-28,那么加了括号后就会被暂存,而在后面的\1处就会被替换过来,外面再加一对引号,就可以了.

您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏