鉴于要把原win server 2k8的dhcp server迁移到linux来,而出于管控需要,这里对200多个员工的ip-mac在2k8的dhcp server做了静态绑定,所以这项迁移工作的一个重点便是:
把win2k8的dhcp静态绑定格式转换成Centos的dhcpd.conf里的格式,于是,请来了大神vim
关于整个转换工作,由于时间关系,以后再慢慢发博文说说,这里主要是把我以前的vim笔记及做这项工作过程中通过google搜索积累了vim使用经验列出,因为我只是个vim菜鸟,vim,你实在太强大了
某行含字符串:aa'&bb,想要变更为:aa&'bb
:%s@&'@'\&@g
如何替换某字符成“回车”?
:s/,/^M/g
把所有的Scope 10.0.8.0 range 10.0.8.2 ,10.0.8.125的 ,(tab加逗号)换成,(逗号)
:g/Scope.*range/ s/[^I],/,/
#===================
换成
#
:%s/^[^I]\+#/#/
下面是转换win2k8的dhcp静态绑定格式到dhcpd.conf的静态绑定:
Scope 10.1.30.0 Add reservedip 10.1.30.2 0016ecebebe4
"PC2011112908aoo." "teach" "DHCP"
Scope 10.1.30.0 Add reservedip 10.1.30.3 0019214f625d
"caiyuewei" "伟" "DHCP"
Scope 10.1.30.0 Add reservedip 10.1.30.4 e89a8f5f743d
"CLASS54." "伟" "DHCP"
Scope 10.1.30.0 Add reservedip 10.1.30.8 485b393b6211
"jwk-03." "xx" "DHCP"
Scope 10.1.30.0 Add reservedip 10.1.30.5 001e6557350a
"lenovo." "lenovo" "DHCP"
提取三对"" "" "" 中的第二个,且把第一对及第三对""删除,再在前面加上host
:%s/^\".\{-}\"\s//
:%s/\s\"DHCP\"//
:%s/^\".*\"/host &/
:g/^host\s\".*\"/ s/\"//g
删除空格开头的行的空格,忽略空白行
:g/^\s.\+/ s/\s//
host xxx
�成
host xxx {
}
:%s/^host\s.*/&\s\{^M^M\}/
匹配mac address:
:%s/[0-9a-f]\{12\}/
匹配�似�@�拥�IP+MAC:10.2.1.32 0004239ed060
:s/\([0-9]\+\.\)\{3\}[0-9]\+\s[0-9a-f]\{12\}/
match�似�@�拥模�# ===============
:s/^#\s=\+/
match�B�m多��空格:
:s/\s\+/
match�似�@�拥模�# 开始 Add Iprange 到作用域 10.0.8.0, 服务器:T260
:s/^#\s\+.*作用域.*T260/
match类似这样的: range 10.0.8.2,10.0.8.126
:s/^^Irange^I.*$/
把�似�@�拥模�
10.0.8.2,10.0.8.12 ;
�Q成:
10.0.8.2,10.0.8.12;
:g/\([0-9]\+\.\)\{3\}[0-9]\+\,/ s/\s\;/;/
在上面加入一行注释: subnet 10.0.8.0 netmask 255.255.255.128 {
:s/^subnet.*$/# xxx^M&/
把类似这样的:
fixed-address 10.0.1.1 112233445566
换成:
fixed-address 10.0.1.1
hardware ethernet 112233445566
:s/^^I^I^Ifixed-address^I\([0-9]\+\.\)\{3\}[0-9]\+/&^M^I^I^Ihardware ethernet/
把这样的:
|| My Lang = zh_cn
|| My Lang = zh_utf-8
换成:
My Lang = zh_cn || zh_utf-8
%s:^||\(.*\)=\(.*\)\_.||\1=\(.*\)$:\1=\2 \1=\3:
注(这个My Lang要保证一致,才让\1=\(.*\)能match)
把这样的:(1),abc,(2),abc,(3),...,(100)
换成:
(2),abc,(3),abc,(4),...,(101)
:%s@\(\d\+\)@\=submatch(1)+1@g
(注:这个+,=,(,),跟\+,\=,\(,\)不同,前者是直接匹配文本的相应+,=,(,)字符)
匹配这样的:
host xxx {
fixed-address 10.2.2.1;
hardware ethernet 11:22:33:44:55:66;
}
:/host.*{\_..*\_..*\_..*}
若要换成一行:
:%s/\(host.*{\)\_.\(.*\)\_.\(.*\)\_.\(.*}\)/\1 \2 \3 \4/
再把tab换成空格
删除html中的js:
:%s@[s|S]cript[^>]*\_.\{-}[s|S]cript>@@g
给文本中特定位置的数字加一个指定的数值,用得到的“和”替换原来的数字。示例文本如下:
<ul>
<li><a href="#17">1 Getting Acquainted</a></li>
<ul> <li><a href="#18">1.1 How to Avoid Reading This Book</a></li> <li><a href="#19">1.2 How to Read This Book</a></li>
<li><a href="#21">1.3 The Game of the Name</a></li>
<li><a href="#21">1.4 Turing Typing into Typography</a></li>
<li><a href="#23">1.5 Why LaTeX</a></li>
<li><a href="#24">1.6 Turing Ideas into Input</a></li>
<li><a href="#24">1.7 Typing It out</a></li>
</ul>
<li><a href="#27">2 Geting Started</a></li>
“#”号后面的数字需要加15:
:%s/#\zs[0-9]\+\ze/\=submatch(0)+15
得到的结果如下:
<ul>
<li><a href="#32">1 Getting Acquainted</a></li>
<ul> <li><a href="#33">1.1 How to Avoid Reading This Book</a></li>
<li><a href="#34">1.2 How to Read This Book</a></li>
<li><a href="#36">1.3 The Game of the Name</a></li>
<li><a href="#36">1.4 Turing Typing into Typography</a></li>
<li><a href="#38">1.5 Why LaTeX</a></li>
<li><a href="#39">1.6 Turing Ideas into Input</a></li>
<li><a href="#39">1.7 Typing It out</a></li>
</ul>
<li><a href="#42">2 Geting Started</a></li>
把这样的:
31 xxxx 31
32 yyyyy 32
33 zz 33
34 aaa 34
35 bbb 35
换成这样的:
32 xxxx 32
33 yyyyy 33
34 zz 34
35 aaa 35
36 bbb 36
:%s/\d\+/\=submatch(0)+1/g
注:以上两个把数字加上指定的数值并返回的数字表示部分也可以用[0-9]代替\d,因为在正规表示式(正则表达式)上是一样的含义,另外,submatch(n)的n由0开始,依次匹配第1,2,……,n+1个
匹配一个单词,如the
:/\<the\>
原win server 2k8是用中文名标注的,因dhcpd.conf似乎不支持中文,所以要换成英文名,但200多个员工若一个个改实在太累,因为决定用vim script去实现:
1,写个vim script:
:%s/206电脑/pc206/g
:%s/市场部办公电脑1/m1/g
:%s/市场部办公电脑3/m2/g
:%s/市场部办公电脑2/m3/g
类似以上的,把所有名称映射都写上,一个映射一行,然后保存为hostMapping.vim,然后打开要修改的文件,再执行命令:
:source hostMapping.vim
关于整个win dhcp server静态绑定转换到Centos dhcp server静态绑定的工作,由于时间关系,以后再慢慢发博文说说,这里主要是把我以前的vim笔记及做这项工作过程中通过google搜索积累了vim使用经验列出,不得不说,vim给工作带来了极大的方便