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

正则表达式非常的灵活,同一种效果有不同的处理方式,这里只简单介绍常用的操作,其他操作后续补充

posted @ 2023-01-08 10:47  Icer_Newer  阅读(2052)  评论(2编辑  收藏  举报