实例1
:%s/^\d\{2,3\}/ \0/gc
全文替换,把行首有两位或3位数字的行缩进4个空格
例如
12,某某某
运行命令后会变为
12,某某某
解释:
% | (替换范围)相当于1,$(整个文件) |
^ | 行首(在模式起始) |
\d | 十进制数位 |
\{n,m\} | 匹配n至m个前面的匹配元 |
\0 | 替代为完整的匹配。“:%s/ <ul/test\0/gc”把所有“<ul”替换为“test<ul”。 |
c | 确认每个替代 |
g | 对行内所有的匹配进行替代。如果没有这个参数,替代只对每行的第一个匹配进行。 |
实例2
:%s/+*[A-Z]\+\d\{3\}\*/\t/gc
全文替换,把A123*,+B123*,+C123*,AZ567*,+AA123*,+BC123*等“以0个或数个+开头,紧跟1个或数个大写英文字母,再跟3个阿拉伯数字,最后跟一个*”的字符串替换为“\t”(tab)。
解释:
* | 规定在它前面的项可以重复任意次(0~任意次) |
\+ | 表示前面一项可以被匹配一次或多次 |
\{n\} | 匹配n个前面的匹配元 |
[A-Z] | 匹配范围内所有大写字母 |
实例3
:%s*\d\@<=>*">*gc
全文替换,把1>、2>、3>、4>、……、10>、……等“数字>”的形式的字符串替换为1">、2">、3">、4">、……、10">、……等“数字">”的形式。
解释:
* | 分隔符,相当于“:%s/abc/cba/gc”中的“/” |
\d | 十进制数位 |
\@<= | 零宽度反向匹配。要求前面的匹配原紧贴在后面的模式之前匹配。“1\@<=>”匹配“1”之后的“>”。 |
实例4
:23,32s/3\(\.\d\)\@=/4/gc
把23~32行间所有3.1、3.2、3.3、3.4……中的3替换成4。替换后的结果是4.1、4.2、4.3、4.4……
解释:
\(\) | 组成单个匹配元 |
\@= | 零宽度匹配前面的匹配原。“3\.\@=”匹配“.”前面的“3”。 |
实例5
:%s#\_^\@<!\(</li>\)#</a>\0#gc
把所有不在行首的“</li>”替换为“</a></li>”
替换前:
</li>
<li><a href="linux_lvm_howto_6">6 参考文档</li>
<li><a href="linux_lvm_howto_7">7 后记</li>
</ul>
替换后:
</li>
<li><a href="linux_lvm_howto_6">6 参考文档</a></li>
<li><a href="linux_lvm_howto_7">7 后记</a></li>
</ul>
解释:
^ | 行首(在模式起始) |
\_^ | 行首(用于任何地方) |
\@<! | 零宽度反向否匹配,要求前面的匹配原_不_紧贴在其后的模式之前匹配。“\(foo\)\@<!bar”匹配任何不在“foobar”中的“bar”。 |
实例6
:%s#>\@<!$#</a>#gc
给所有不以“>”结尾的行末尾添加“</a>”
替换前:
</li>
<li><a href="linux_lvm_howto_5">5 LVM应用实例
<ul style="list-style: none;">
<li><a href="linux_lvm_howto_5.1">5.1 在三个磁盘上创建LVM</a></li>
替换后:
</li>
<li><a href="linux_lvm_howto_5">5 LVM应用实例</a>
<ul style="list-style: none;">
<li><a href="linux_lvm_howto_5.1">5.1 在三个磁盘上创建LVM</a></li>
解释:
$ | 行尾(在模式结尾) |
\_$ | 行尾(用于任何地方) |
Views: 271