vi正则表达式

搜索命令:/正则表达式

替换命令::s/正则表达式/替换字符串/选项

:%s/str1/str2/g   该命令中表示进入命令行模式,%表示对该文件所有行有效,s表示查找并替换,正则表达式str1表示被替换的内容,字符串str2表示替换后的内容,g表示整行有效

正则表达式字符匹配

 

 

 

 

 

 

 

 

 

 

 

实例替换

            

 

 实例删除

3.删除所有空行       

  :g/^$/d  (删除没有任何字符除了一个回车符的行)  

  :g/^[ \t]*$/d      (删除有空格或是tab符号的所有行)                 

 

4.删除含有某些字符的行     

  :g/ERROR/d  (删除含有ERROR字符的所有行,d是删除指令) 

5.删除每行的所有前导空格        

  :%s/^ *//g  (后面的//之间没有任何东西,也就是说不用任何东西去替换前面的前导空格,即删除前导空格)

6.在文件中的每一行的开始插入 -> (或者换其他字符)

  :%s/^/->/g

7.在每一行的尾部加上一个句号(或者其他字符)

  :%s/$/。/g

8.删除以数字开头的行

  :%s/^\d.*$//g

9.删除以abc三个字母一起开头的行

  :%s/^[a|b|c].*$//g或者:%s/^abc.*$//g

10.删除重复行

  :%s/^\(.*\)\n\1$/\1/g      将两行重复行压缩成一行(/^匹配到行首,.*匹配任意多个字符,\(.*\)相当于把之前匹配得到的字符保存下来,\1就表示保存的内容,\n\1表示换行之后再去匹配之前保存的字符,到这里就匹配了两行,$接着到换行之后的行尾,之后的\1表示用前面保存的匹配到的第一行字符去替换匹配得到的两行字符,这就相当于把两行重复行压缩成一行)

  :%s/^\(.*\)\(\n\1)\+$/\1/g       将多行重复行压缩成一行  (\n\1)\+表示匹配任意多重复行

 

 实例对调

1.交换列表中所有连字符分隔的条目的顺序

  如将ABC:XYZ对换成XYZ:ABC

  :%s/\(.*\):\(.*\)/\2:\1/g  \1表示第一次保存的内容,\2表示第二次保存的内容

函数式

格式:

  :s/str1/\=函数式

例1:将各行的id字符串替换为行号

  :%s/\<id\>/\=line(".")    \<id\>匹配的是单独的词id,而不是amid这类嵌在某个单词里面的字符。line(".")是返回各行行号的一个函数。

例2:将每行开头的单词替换为(行号-10)

  :%s/^\<\w\+\>/\=(line(".")-10)

与Perl正则表达式的区别

 Sed用法(用来直接处理文件)

posted @ 2019-12-13 15:44  生活的高手  阅读(1770)  评论(0编辑  收藏  举报