vim中查找/
替换s,一般格式 %s/ / /
列全部%,只找到每行第一个
行全部g,只找光标所在整行
通配符与正则表达式区别:
通配符常与shell命令配合,与文件名相关
正则表达式通常用于文件的内容搜索查找、替换有关
分类:①、基础
②、扩展
一、基础正则表达式
原字符分类:①、字符匹配 ②、匹配次数 ③、位置锚定 ④、分组
字符匹配
. 任意单个字符,如r..o
[ ] 选定的字符,如[a-zA-Z]; [a-z]<=>[[:lower:]]
匹配次数
* 匹配前面一个字符任意次,包括0次。如oo*——>查找至少有一个o开头的
.* 任意长度字符。包括贪婪模式,如root:oo:ro:taaa——>输入/r.*t——>root:oo:ro:t
? 匹配前面一个字符任1次或1次,即可有可无。(如果有符号需要用转义,例/etc/?)
+ 匹配前面一个字符任至少1次,即肯定有。
{n} 匹配前面一个字符n次
{m,n} 匹配前面一个字符m到n次
{,n} 匹配前面一个字符n次以下
{n,} 匹配前面一个字符n次以上
[0-9]{n} 一个n位的数字串(这是扩展正则)
[0-9]{n-m} 一个n到m位的数字串(这是扩展正则)
位置锚定
^ 以xx开头,例^#。
将每行加上#注释:%s/^/#/
$ 以xx结尾,例n$
/正则表达式/ 搜索匹配的行,例以s开头的行:/^s/
^$ 空行
/< 单词词首。(除字母、数字、_,其他都算分隔符) 例/<a
/> 单词词尾。例b/>
/< 单词/> 指定单词
分组
(单词) 例将root换为rooter:%s/(root)/1er/g <==> %s/(root)/&er/g 注意:1代表第一个()里的内容,/2就代表第二个。&代表前面搜的啥,我就是啥
| 或 例如:a|b <==> [ab] (c|C)at代表cat或Cat ^(a|b)代表以a开头或b开头
二、扩展正则表达式:基本不需要转移字符了。某些与基础正则表达式还是一样的。但需要工具支持才可以使用。
set noic 不忽略大小写