vim编辑器提供的正则替换命令很强大,在末行模式下可以使用替换命令,其命令格式如下:
:[range]s/s1/s2/[option]
其中,
[option] 表示检索范围,省略时表示当前行,示例如下:
1,10 表示从第一行到第十行
% 表示整个文件
.,$ 示从当前行到文件尾
1,$ 表示整个文件
[option] 表示额外选项,可以有如下选项:
g 在当前整行中进行替换
c 在每次替换前需要进行确认
i 忽略大小写
这些选项可以合并使用
正则表达式
元字符
. 匹配任意字符
[abc] 匹配方括号中的任意一个字符,可用-表示字符范围。如[a-z0-9]匹配小写字母和数字
[^abc] 匹配除方括号中字符之外的任意字符
\d 匹配阿拉伯数字,等同于[0-9]
\D 匹配阿拉伯数字之外的任意字符,等同于[^0-9]
\x 匹配十六进制数字,等同于[0-9A-Fa-f]
\X 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f]
\l 匹配[a-z]
\L 匹配[^a-z]
\u 匹配[A-Z]
\U 匹配[^A-Z]
\w 匹配单词字母,等同于[0-9A-Za-z_]
\W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
\t 匹配<TAB>字符
\s 匹配空白字符,等同于[\t]
\S 匹配非空白字符,等同于[^\t]
需要转义的字符
* . \ / [ ] 这六个字符均需要加上\进行转义才能匹配到自身
表示数量的元字符
* 匹配0-任意个
\+ 匹配1-任意个
\? 匹配0-1个
\{n,m} 匹配n-m个
\{n} 匹配n个
\{n,} 匹配n-任意个
\{,m} 匹配0-m个
表示位置的元字符
$ 匹配行尾
^ 匹配行首
\< 匹配单词词首
\> 匹配单词词尾
替换变量
在正则式中以\(和\)括起来的正则表达式,在后面使用的时候可以用\1、\2等变量来访问\(和\)中的内容
例子: 将11-12-01替换为12.01.2011
s/\(\d\+\)-\(\d\+\)-\(\d\+\)/\2.\3.20\1/