/正则表达式:搜索命令
:s:替换命令
:s/正则表达式/替换字符串/选项
元字符:
* | 匹配任意一个字符 |
[abc] | 匹配方括号中的任意一个字符,可以用-表示范围如[a-z0-9]匹配小写字母和阿拉伯数字 |
[^abc] | 在方括号内开头使用^号,表示匹配方括号中字符之外的任意字符 |
\d | 匹配阿拉伯数字,等同于[0-9] |
\D | 匹配阿拉伯数字外的任意字符,等同于[^0-9] |
\x | 匹配十六进制数字,等同于[0-9A-Fa-f] |
\X | 匹配十六进制数字之外的任意字符,等同于[^0-9A-Fa-f] |
\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.把所有单词help或Help都改为大写的HELP
:%s/[Hh]elp/HELP/g
2.使用单个空格替换一个或多个空格
:%s/space\+/space/g 注:空格是空字符可能不明显用spcae替代
3.删除所有空行(没有任何字符,除了回车)
:g/^[\t]*$/d
4.删除含有某些字符的行
:g/ERROR/d
5.删除每行的所有的前导空格
:%s/^space*//g
6.在文件中的每一行的开始插入->(或其他字符)
:%s/^/->/g
7.在每一行的尾部加上一个句号(或其他字符)
:%s/$/。/g
8.删除以数字开头的行
:%s/^\d.*$//g
9.删除以[a,b,c]开头的行
:%s/^[a|b|c].*$//g
10.删除重复行
:%s/^\(.*\)\n\1$/\1/g 将两行重复行压缩成一行
:%s/^\(.*\)\(\n\1\)\+$/\1/g 将多行重复行压缩成一行
使用\(和\)符号扩起正则表达式,即可在后面使用\1 \2等变量来访问\(和\)中的内容
实例:
1.交换列表中所有连字符分隔的条目的顺序
ABC:XYZ
:%s/\(.*\):\(.*\)/\2:\1/g
2.将所有方法foo(a,b,c)的实例改为foo(b,a,c)
foo(bar(8),x+y+z,5) -> foo(x+y+z,bar(8),6)
:%s/foo(\([^,]*\),\([^,]*\),\([^,]*\))/foo(\2,\1,\3)/g
3.查找test开头的后面为一个或多个空格,然后为一个单词。将test和这个单词调换位置
:%s/\(test\)\s\+\(\w\+\)space/\2space\1/g
函数式:
格式:
:s/替换字符串/\=函数式
例1:将各行的id字符串替换为行号
:%s/\<id\>/\=line(".")
例2:将每行开头的单词替换为(行号-10)
:%%s/^\<\w\+\>/\=(line(".")-10)