show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 我们学习了
- 替换
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
- 把所有的
- 但是同时
fourty
、fourteen
都匹配了- 我们可以明确four必须是一个独立单词
- 需要
:%s/\<four\>/4/g
- 但是同时
twenty-four
- 还是被替换为
twenty-4
- 还是被替换为
- 如果只想精准匹配four
- 前后可以加^$明确开头和结尾。
:%s/^four$/4/g
匹配独立的four
这个单词- 这样替换就可以了
- 如果我们要替换所有的以
a
开头d
结尾的单词- 并允许在词中进行替换
oeasy
:%s/\<a.*d\>/oeasy/g
- 并允许在词中进行替换
add
、and
被替换band
不被替换
- 我要完成如下这么一个替换
- 应该怎么做呢
- 🤔
- 确定查找模式最终为
\d\{1,2}.
- 把查找到的匹配字符串替换为换行
- 如果我们想要删除空行
- 应该怎么办?
- 首先我们找到空行
/^$
- 从开头
^
到结尾$
中间没东西 - 找到了以后,我们来替换
%s/^$//
这并不能删除行- 执行了之后空行还是存在
- 我们可以使用
g
命令:g/^$/d
- 如果开头结尾之间有空格怎么办?
/^\s*$
先找到匹配- \s表示空格和tab
- *表示0-任意多个空格或者tab
- 下面这个命令将这些空格和tab组成的行删除
:%g/^\s*$/d
- 那能否把空格分割的文本分行
:%s/\s\+/\r/g
%
表示所有行s
替换subtitute\s
空格和tab\+
一个或一个以上\r
换行g
全局 global
- 如果我们想把头或者尾的空格和tab去掉
- 应该怎么办呢?
- 头部的空格或tab
^\s*
- 尾部的空格或tab
\s*$
- 头部或尾部的空格或tab
^\s*\|\s*$
- 把头部或尾部的空格或tab替换为空
:%s/^\s*\|\s*$//g
- 如果我们要删除所有
//
开头的行- 这个
/
需要转义 - 先搜索/^//.*$
- 这个
:%s/^\/\/.*$//g
- 删除了注释内容
- 但是空行还在
:g/^\/\/.*$/d
- 删除了空行
- 但是开头有空格和tab的无法删除
:g/^\s*\/\/.*$/d
- 把
\\
前面有空格和tab的也删除了
- 把
- 进行了模式匹配批量替换的的操作
- 替换单词
:%s/\<a.*d\>/oeasy/g
- 转义字符
%s/^\/\/.*$/d
- 删除空行
:g/^\s*$//d
- 删除注释行
:g/^\s*\/\/.*$/d
- 替换还有一些什么玩法吗?🤔
- 下次再说 👋