vim正则表达式
vim doc: usr_27.txt 查找命令及模式
一、使用正则表达式的命令[/,?, s, g]
实践用法:
1, 模式块作为替换的内容
1~多个#序列后面加上空格
:%s/\(#\+\)/\1 /g
1. 搜索命令
使用正则表达式的命令最常见的就是/, ?(搜索)命令。其格式如下:
/ 正则表达式, 向下搜索
?正则表达式,向上搜索
如:
/\d\d:\d\d:\d\d " 查找如 17:37:01 格式的时间字符串
2. 替换命令s
命令的完整形式: [range]s/from/to/[flags]
把from指定的字符串替换成to指定的字符串,from可以是正则表达式。
[range]的取值列表:
| 符号 | 说明 |
|---|---|
| 不写range | 默认为光标所在的行。 |
| % | 所有行(与 1,$ 等价) |
| . | 光标所在的行。 |
| 1 | 第一行。 |
| $ | 最后一行。 |
| 33 | 第33行。 |
| 'a | 标记a所在的行(之前要使用ma做过标记)。 |
| .+1 | 当前光标所在行的下面一行。 |
| $-1 | 倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)。 |
| 22,33 | 第22~33行。 |
| .,$ | 当前行 到 最后一行。 |
| 'a,'b | 标记a所在的行 到 标记b所在的行。 |
注意,上面的所有用于range的表示方法都可以通过 +、- 操作来设置相对偏移量。
[flags]
这里可用的flags有:
| 符号 | 说明 |
|---|---|
| 无 | 只对指定范围内的第一个匹配项进行替换。 |
| g | 对指定范围内的所有匹配项进行替换。 |
| c | 在替换前请求用户确认。 |
| e | 忽略执行过程中的错误。 |
查看匹配yes单词的数量:
:%s/yes//gn
注意:上面的所有flags都可以组合起来使用,比如 gc 表示对指定范围内的
所有匹配项进行替换,并且在每一次替换之前都会请用户确认。
例如对全文替换,且替换前请求确认
:%s/from/to/gc
将所有的four替换成4,但是fourteen中的four不替换
:s/\<four\>/4/g
:%s/ */ /g 把一个或者多个空格替换为一个空格。
:%s/ *$// 去掉行尾的所有空格。
:%s/^/ / 在每一行头上加入一个空格。
3. global 命令形式
global命令格式 : [range]global/{pattern}/{command}
global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern}可以是正则表达式,
然后对匹配到的行执行命令{command},如果希望对没匹配上的行执行命令,则使用global!或vglobal命令。
一些例子:
1) 删除包含某字段(例如aaa)的行
:g/aaa/d
2) 删除不包含某字段(例如aaa)的行
:g!/aaa/d
3) 删除指定的行
:x,.d #从x行删除到当前行;
:.,xd #从当前行删除到x行;
4) 删除只有空白的行
:g/^\s*$/d
二、正则表达式的用法
表示位置的符号
| 元字符 | 说明 |
|---|---|
| $ | 匹配行尾 |
| ^ | 匹配行首 |
| < | 匹配单词词首 |
| > | 匹配单词词尾 |
表示数量的元字符
| 元字符 | 说明 |
|---|---|
| * | 匹配0到任意个 |
| + | 匹配1到任意个 |
| ? | 匹配0或1个 |
| {n,m} | 匹配n-m个 |
| {n} | 匹配n个 |
| {n,} | 匹配n-任意个 |
| {,m} | 匹配0-m个 |
元字符一览
| 元字符 | 说明 |
|---|---|
| . | 匹配任意一个字符 |
| [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]。 |
另外,如果要查找字符 *、.、/等,它们不在方括号之内时,则需要在前面用 \ 符号,表示这不是元字符,而只是普通字符而已。
| 元字符 | 说明 |
|---|---|
| * | 匹配 * 字符。 |
| . | 匹配 . 字符。 |
| / | 匹配 / 字符。 |
| \ | 匹配 \ 字符。 |
| [ | 匹配 [ 字符。 |
方括号内的特殊字符
键盘上的特殊字符放到方括号中基本都能直接匹配
[!@#$%^&*()_+-=[]\{}|:";'<>?,./~]
例外的情况需要加\的有 -,\.
中划线如果与数字,字母,空格相邻时,又希望它匹配文中的-,就加转意字符
有些情况反斜杠也要加,为了通用性考虑,如果为了匹配 - \ 就使用 [ \- \\]
方括号的用法:
方括号后加* 或+ 匹配任意多个 或 1个以上括号内的任意字符
例如 [a-zA-Z0-9]* 匹配任意多个字母数字组成的字符串。
ref
https://www.cnblogs.com/PegasusWang/p/3153300.html
vim正则表达式的更多相关文章
- vim正则表达式~转
vim正则表达式(转) Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作. 如果你比较熟悉Perl的正规表达式,可以直接参照与Perl正则表达式的区别一节. 一.使用正则表 ...
- vi/vim正则表达式
http://www.cnblogs.com/penseur/archive/2011/02/25/1964522.html 毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 : ...
- [转] vim 正则表达式 很强大
毋庸多言,在vim中正则表达式得到了十分广泛的应用. 最常用的 / 和 :s 命令中,正则表达式都是不可或缺的. 下面对vim中的正则表达式的一些难点进行说明. 关于magic vim中有个magic ...
- Vim正则表达式匹配替换字符串
/********************************************************************** * Vim正则表达式匹配替换字符串 * 说明: * 用V ...
- VIM 正则表达式详解及与 perl 正则的区别
转载自:http://www.xuebuyuan.com/806332.html:个人进行了一些修正和添加. 下面我们对 VIM 正则表达式进行介绍并会显示指出其与 Perl 正则的不同之处. 字符集 ...
- vim 正则表达式获取双引号中的字符
vim 正则表达式获取双引号中的字符 1.获取双引号中的字符 :%s/.*\".∗\".*/\1/ 2.用字符串建立标签 如 hello <hello></ ...
- vim正则表达式(转)
Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作. 如果你比较熟悉Perl的正规表达式,可以直接参照与Perl正则表达式的区别一节. 一.使用正则表达式的命令 使用正则表达 ...
- VIM正则表达式。
看了那个30分钟正则表达式入门.但是是在VIM使用过程中偶尔会出现达不得想要效果的情况.后面百度了下,确然,VIM的正则还是有点区别的. 转自:http://www.cppblog.com/kefen ...
- 终于明白vim 和 grep 中 的正则表达式的用法, vim 正则表达式 和grep基本正则表达式 几乎一样
要搞清楚 vim中的正则和普通的Perl正则表达式的区别: 因为在perl中所有的元字符 都可以直接使用, 不需要在 元字符的前面加 反斜杠. 但是在vim, 包括grep中就有所区别, 同样是元字符 ...
随机推荐
- fastcgi php-cgi与php-fpm区别和之间的关系
关于FastCGI.php-cgi.php-fpm的区别是什么,各自有什么用途,以及相互间的关系是什么,查阅相关资料,可谓是众说纷纭,莫衷一是: 说法一:fastcgi是一个协议,php-fpm实现了 ...
- centos6 通过 kvm 安装 centos7
参考: http://blog.51cto.com/wzlinux/1731324 http://blog.csdn.net/ztynet/article/details/54952425 一.检查C ...
- 基于Kafka的生产者消费者消息处理本地调试
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/68174111冷血之心的博客) Kafka下载地址:http://d ...
- Myeclipse安装、配置、测试
Myeclipse安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与激活 4.JavaSE开发测试(确保JDK已正确安装) 5.JavaEE开发测试(确保服务器和 ...
- 试试SQLServer 2014的内存优化表
SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据 ...
- php获取当前被调函数的参数列表
下面是php中的一个获取当前别调用函数的参数列表的测试程序,感受一下php类库的强大之处: // 测试获取参数列表 getArgs('aaa', 'bbb', 'ccc', 123, true); f ...
- php项目踩到的empty函数的一个坑
报错信息: PHP Fatal error: Can't use function return value in write context in /目录省略.../XXService.php on ...
- Word Embedding/RNN/LSTM
Word Embedding Word Embedding是一种词的向量表示,比如,对于这样的"A B A C B F G"的一个序列,也许我们最后能得到:A对应的向量为[0.1 ...
- 基于jQuery发展历程时间轴特效代码
分享一款基于jQuery发展历程时间轴特效代码,带左右箭头,数字时间轴选项卡切换特效下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div id="time ...
- 图解JAVA参数传递
今天做项目,发现了一个问题,当String作为参数传递的时候,在函数内部改变值对外部的变量值无影响,如下代码: public static void main(String[] args) { Str ...