记性不好,才一段时间不用发现vim 的东西忘的差不多了。要重新熟悉才行。现从正则表达式开始,用惯了Java 和Python 的正则表达式,再用Linux 的正则表达式还真有点不习惯,而且grep 和vim 的正则表达式有些微区别,grep 和egrep 的正则表达式也有一点区别。用用之前要好好想想才行,太恶心了。 今天现把VIM 的正则表达式整理一些,过几天整理grep 的。(补充:grep的正则表达式在元字符方面和vi差不多,不整理了)
vim 的正则表达式的有两种模式,magic 和nomagic ,两种模式下,元字符是不一样的。可以通过set mogic 和set nomagic 进行选择,默认是magic 。建议不要乱设置,就用magic 模式差不多。也可以再Pattern 指定用magic 和nomagic ,这里不废话了,下面列出常用的magic 的表达式。
在vi命令行模式下输入:
:1, $s/tom/David/g ^ ^ ^ ^ ^ | | | | |---- global 对全文有效 | | | | | | |--------- 将tom 替换为 David , 使用正则表达式. | |------- 替换单词 |------ 从文件的第一行到文件的最后一行. 表: ---------------------------------------------------------------------------------------------- 元字符 | 功能 | 例子 | 匹配什么 ---------------------------------------------------------------------------------------------- ^ | 锚定行的开始 | /^love/ | 匹配所有以love开头的行. ---------------------------------------------------------------------------------------------- $ | 锚定行的结束 | /love$/ | 匹配所有以love结束的行. ---------------------------------------------------------------------------------------------- . | 匹配一个字符 | /l..e/ | 匹配这样的行, 这些行包含这样的字符, | | |第一个字符是 l,紧跟着两个字符,然后是e. ----------------------------------------------------------------------------------------------- * | 代表0个或多个先前字符 | /*love/ | 匹配这样的行, 有0个或者多个空格,空格 | | |候跟着love ----------------------------------------------------------------------------------------------- [] | 匹配字符组中的一个字符 | /[lL]ove/ | 匹配所有包含love or Love 的行 ----------------------------------------------------------------------------------------------- [x-y] | 匹配以字符范围组成的组中的一个字符 | /[A-Z]ove | 匹配所有这样的行, 这些行包含如下字符 | | |第一个字符是从A到Z 中间的一个, 后面跟 | | |着ove ----------------------------------------------------------------------------------------------- [^] | 匹配一个不在范围内的字符 | /[^A-Z]ove/ | 匹配所有这样的行, 这些行包含如下字符 | | |第一个字符不是从A到Z 中间的一个, 后面 | | |跟着ove ----------------------------------------------------------------------------------------------- \ | 用来转义一个字符 | /love\./ | 匹配所有这样的行, 这些行包含如下字符 | | |love 后面跟着一个点, 通常点是表示任何 | | |字符的通配符. ----------------------------------------------------------------------------------------------- \< | 锚定单词的开始 | /\<love/ | 匹配所有这样的行, 这些行包含以love | | |开头的单词 (vi & grep 都支持这个功能) ----------------------------------------------------------------------------------------------- \> | 锚定单词的结束 | /<love\> | ... ^ ... 以love结束的单词 ... ^ ----------------------------------------------------------------------------------------------- \(..\) | 标记后面用到的匹配字符 | /\(love\)a\1b | 最多可以使用9个标签. 第一个标签是模板 | | |最左边的部分. 在这例子中, 模板love | | |保存为标签1, 后面的\1指的就是love; | | |本例子搜索的是这样的行, 这些行包含这样 | | |的字符,在lovea 后面跟着loveb. ------------------------------------------------------------------------------------------------ [NOTE: 各种版本的Unix 以及模板匹配 (pattern-matching) 实用程序并不都是可信赖的, 通常我们使用 vi & grep]
对前一个模式的次数匹配
位置匹配
常用预定义字符
其他
|
|