Gvim 正则表达式

700 阅读1分钟
  • 正则表达式在Linux系统中用处很广

  • 正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作

  • gvim, perl , sed 等均会使用 :%s/foo(\[^,]*\),\[^,]*\),\[^,]*\))/foo(\2,\1,\3)/g

(搜索)命令

/正则表达式

: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匹配字符
\s匹配空白字符,等同于[ \t]
\S匹配非空白字符,等同于[^ \t]

特殊字符[\转义字符]

*匹配*字符
.匹配.字符
/匹配/字符
\匹配\字符
[匹配[字符

表示数量的元字符

*匹配0-任意个
+匹配1-任意个
?匹配0-1个
{n,m}匹配n-m个
{n}匹配n个
{n,}匹配n-任意个
{,m}匹配0-m个
$匹配行尾
^匹配行首(区分[^abc])
\<匹配单词词首
\>匹配单词词尾
  1. 把所有单词的help或Help都改写为大写的HELP
    :%s/[Hh]elp/HELP/g
  2. 使用单个空格替换一个或多个空格
    :%s/ +/ /g
  • substitute(替代) 执行的是替换;
  • global执行的其他命令
  1. 删除所有的空行(没有任何字符,除了一个回车符)
    :g/^$/d
    :g/^[\t]*[\t]*$/d
  2. 删除含有某些字符的行
    :g/ERROR/d
  • :[range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或vglobal命令。
  1. 删除每行的所有的前导空格
    :%s/^ *//g
  2. 在文件中的每一行的开始插入->(或者其它字符)
    :%s/^/->/g
  3. 在文件中的每一行的尾部插入。(或者其它字符)
    :%s/$/。/g
  4. 删除以数字开头的行
    :%s/^\d.*$//g

9.删除以[a,b,c]开头的行
:%s/^[a|b|c].*$$//g

  1. 删除重复行
    :%s/^\(.*)\n\1$/\1/g将两行重复行压缩成一行
    :%s/^\(.*\)\(\n\1\)\+$/\1/g 将多行重复行压缩成一行

    替换变量

    • 使用(和)\符号括起正则表达式,即可在后面使用\1、\2等变量来访问(和)\中的内容。 例:/(a+)[^a]+\1 头和结尾处的a的个数相同的字符串, 如aabbaa,aaacccaaa,但是不匹配abbbaa

实例

  1. 交换列表中所有字符分隔的条目的顺序 ABC:XYZ
    :%s/\(.*\):\(.\*)/\2:\1/g
  2. 将所有方法foo(a,b,c)的实例改为foo(a,b,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
    :5,10s/

函数式

 :s/替换字符串/\函数式
 例1:将各行的id字符串替换为行号
`:%s/\<id\>/\=line(".")` (\<表示词首,  \>表示词尾)
-2:将每行开头的单词替换为(行号-10)
`:%s/^\<\w\+\>/\=(line(".")-10)`

sed用法[shell命令]

 用来直接处理文件
简单示例:
1. 删除所有空行:
sed 's/^$/d'   *.txt
2. 删除所有只包含空格或者制表符的行
sed 's/^[]*$/d'  price.txt
3. 删除所有引号
sed 's/" //g' price.txt