查找细节
回忆上节课内容🤔
-
我们学习了
- 替换
substitude
- 替换
-
替换单行
:s/shiyanlou/oeasy
-
加上
range:3,5s/shiyanlou/oeasy:%s/shiyanlou/oeasy
-
加上
flag:3,5s/shiyanlou/oeasy/g多个替换:3,5s/shiyanlou/oeasy/gc多个替换且逐个确认
- 替换还是很方便的
- 但是我想替换中使用正则表达式
- 可以么?🤔
- 先回忆一下正则表达式模式匹配
模式 - 列举字符
-
[abcd]- 表示匹配方括号中列举的
- 任意一个 字符
- abcd 中的任意一个字符
-
[a-z]- 可用
中划线-` 表示字符范围来减少列举的 [a-d]等价于[abcd]
- 可用
-
[^abcd]- 表示匹配除方括号中字符以外的任意字符
- 除了
abcd之外的任意字符
模式 - 常用符号
-
.- 等价于
[^\n] - 除了换行符
( \n )以外,表示匹配任意一个字符
- 等价于
-
\l- 等价于
[a-z] - 表示匹配 任意一个
小写字母 - 意思是lowercase
- 等价于
-
\L- 等价于
[^a-z] - 表示匹配 任意一个
除小写字母外的其他字符
- 等价于
-
\u- 等价于
[A-Z] - 表示匹配 任意一个
大写字母 - 意思是uppercase
- 等价于
-
\U- 等价于
[^A-Z] - 表示匹配
任意一个除大写字母外的其他字符
- 等价于
-
\w- 等价于
[0-9A-Za-z_] - 表示匹配
任意一个字母、数字、下划线
- 等价于
-
\W- 等价于
[^0-9A-Za-z_] - 表示匹配
任意一个字符除了字母、数字、下划线。
- 等价于
-
\d- 等价于
[0-9] - 表示匹配
任意一个数字
- 等价于
-
\D- 等价于
[^0-9] - 表示匹配
任意一个除数字外的其他字符
- 等价于
-
\x- 等价于
[0-9A-Fa-f] - 表示匹配
任意一个十六进制数字
- 等价于
-
\X- 等价于
[^0-9A-Fa-f] - 表示匹配
任意一个除十六进制数字外的其他字符
- 等价于
-
\s- 包括两种
分隔符 空格和tab
- 包括两种
帮助手册
起止标记
-
然后我们明确一下起止标记
^表示匹配 输入字符串的开始位置 (行首)。$表示匹配 输入字符串的结束位置 (行尾)。
-\<表示匹配 单词词首。\>表示匹配 单词词尾。
对应单词
-
:%s/four/4/g- 把所有的
four替换为4
- 把所有的
-
但是同时
twenty-four- 被替换为
twenty-4
- 被替换为
- 这不合理
-
我们需要`:%s/\<four\>/4/g
\<four\>匹配独立的four- 这样替换就合理了
单词匹配
-
如果我们要替换所有的以
a开头d结尾的单词- 不允许在词中进行替换
oeasy :%s/\<a.*d\>/oeasy/g
- 不允许在词中进行替换
add、and被替换band不被替换
删除空行
- 首先我们找到空行
/^$ - 从开头
^到结尾$中间没东西 -
找到了以后,我们来替换
%s/^$//这并不能删除- 删完了之后空行还是存在
-
我们可以使用
g命令:g/^$/d
-
如果开头结尾之间有空格怎么办?
/^\s*$先找到匹配- \s表示空格和tab
- *表示0-任意多个空格或者tab
:g/^\s*$/d
转义字符
-
如果我们要删除所有
//开头的行- 这个
/需要转义 - 先搜索/^//.*$
- 这个
-
:%s/^\/\/.*$//g- 删除了注释内容
- 但是但空行还在
-
:g/^\/\/.*$/d- 删除了空行
- 但是开头有空格和tab的无法删除
-
:g/^\s*\/\/.*$/d- 把
\\前面有空格和tab的也删除了
- 把
总结
- 进行了模式匹配批量替换的的操作
-
替换单词
:%s/\<a.*d\>/oeasy/g
-
转义字符
%s/^\/\/.*$/d
-
删除空行
:g/^\s*$//d
-
删除注释行
:g/^\s*\/\/.*$/d
- 替换还有一些什么玩法吗?🤔
- 下次再说 👋
[Github地址] (

浙公网安备 33010602011771号