Gvim基础操作(正则表达式)-02
Gvim正则表达式
正则表达式在linux中使用非常广泛。主要是进行一些替换,在编写脚本的时候都会使用到。gvim、perl、sed、tcl中都会使用到。
Gvim正则表达式的使用
- 搜索命令
/正则表达式--搜索内容 - :%s(替换)命令
:%s/正则表达式/替换字符串/选项
元字符
. 表示匹配任意字符
[abc] 匹配方括号内的任意一个字符,可以使用-表示字符范围
[a-z0-9] 表示匹配0-9及小写字母
[^abc] ^表示匹配出来括号中的字符
\d 匹配阿拉伯数字
\D 匹配除了阿拉伯数字之外的字符
\x 匹配十六进制数
\X 匹配十六进制数字之外的任意字符
\w 匹配任意数字字母下划线
\W 匹配数字字母下划线之外的任意字符
\t 匹配tab
\s 匹配空白字符
\S 匹配非空白字符
特殊字符
\* 匹配*
\. 匹配.
\/ 匹配/
\\ 匹配\
\[ 匹配[
表示数量的元字符
* 匹配0-任意个
\+ 匹配1到任意个
\? 匹配0-1个
\{n,m} 匹配n-m个
\{n,} 匹配n-任意个
\{,n} 匹配0-n个
表示位置的符号
$ 表示行尾
^ 表示行首
\< 匹配单词词首
\> 匹配单词词尾
实例
1.将所有的help或者是Help换为HELP
:%s/[Hh]elp/HElLP/g
- substitute--执行的替换操作
- global执行的是其他命令
2.使用单一空格替换一个或者多个空格
:%s/ \+/ /g
3.删除没有字符的空行及有空字符的空行
:g/^\s*$/d d表示删除操作
4.删除某些字符的行
:g/ERROR/d
5.删除每行的前导空格
:%s/^ *//g
6.在每行的开始插入>
:%s/^/->g
7.在所有的行尾加一个句号
:%s/$/。/g
8.删除以数字开头的行
:%s/^\d.*$//g
9.删除以[a,b,c]开头的行
:%s/^[a|b|c].*//g
替换成空格,还有行,删除行直接替换成空/xxx//g
10.删除重复的行
使用(和)符号括起来的正则表达式,搜索得到的内容可以在后面的正则表达式进行引用\1、\2表示前面搜索到的第一个和第二个
/\(a\+\)[^a]\+\1
头部搜索1-n个a,中间匹配1-n个非a,最后\1,表示使用之前的内容和头部一致
意义:搜索头和尾处a的个数相同的字符串
aabbbbaa aaacccdhaaa abbbaa(x)
删除重复的行
:%s/^\(.*\)\n\1$/1/g
11.将多行重复的行压缩至一行
:%s/\(.*\)\(\n\1\)+$/\1/g
复杂的例子
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),5)
:%s/foo(\([^,]*,\[^,]*,[^,]*\))/foo(\2,\1,\3)/g
3.查找test开头的后面为一个或者式多个空格,然后作为一个单词。将test和这个单词调换位置
:%s/\(test\)\s\+\(\w\+\)/\2 \1/g
函数式
格式
:%s/替换字符串/=函数式
例1:将各行的id字符串替换为行号
%s/\<id\>/\=line(".")
2.将每行开头的单词替换为(行号-10)
:%S/^\<\W\+\>/\=(line(".")-10)
与perl正则表达式的区别
Sed用法
直接处理文件
1.删除所有的空行
sed '/^$/d' *.txt
2.删除所有只包含空格或者制表位的行
sed '/^[ ]*$/d' price.txt
3.删除所有的引号
sed 's/"//g' price.txt
正则表达式非常的灵活,同一种效果有不同的处理方式,这里只简单介绍常用的操作,其他操作后续补充