设为首页 加入收藏

TOP

vi/vim高级命令集粹(四)
2014-11-23 22:55:07 来源: 作者: 【 】 浏览:25
Tags:vi/vim 高级 命令 集粹
male


为了完成上述功能,只需执行脚本employee.vim ,使用方法为 :so employee.vim 回车即可。


脚本内容如下:


:%s/ / /


:%s/\(............\)\( *\)/\1/


:%s/\([A-Za-z][A-Za-z]*\)\(\.\)\([A-Za-z][A-Za-z]*\)/\u\3\2\u\1/


:%s/$/ xxxxxx/


:%s/\([0-9]\{6}\)\([0-9]\{6}\)\([0-9]\{3}\) \(xxxxxx\)/\1\2\3 \2/


:%s/\(..\)\(..\)\(..\)$/19\1\/\2\/\3


:%s/$/ xxxxxx/


:%s/\([0-9]\{14}[13579]\)\(.*\)\(xxxxxx\)/\1\2male /


:%s/\([0-9]\{14}[02468]\)\(.*\)\(xxxxxx\)/\1\2female/


:$


:s/.*/&^M-----------------------------------------------


:g/female/.m$


在这个脚本中,使用了大量的正则表达式,这里仅对涉及到的正则表达式做一简要介绍。有关正则表达式的内容相当多,本文不可能占用大量篇幅叙述,请大家谅解。


% 地址范围符号,代表文件中的所有行,作用等同于地址范围 1,$


. 与任意单字符(换行符除外)匹配,例如 y.s 可以匹配 yas y.s 或 y s 等等。


* 与前一字符的0次或多次出现匹配,例如 y*s 可以匹配 yys yyyyys 或 s 等等。


$ 与行尾匹配。


& 代表模式匹配中出现的字符串,例如 s/abc/&def 是把当前行的abc替换成abcdef 。


[] 匹配[]中出现的字符,例如[abc]匹配字符 a,b 或 c ,[a-zA-Z]匹配所有的英文字符。


\( \) \(和\)之间出现的内容可以由\num来替代。


\1\2\3 替代\(和\)之间出现的内容。


\u 将后续字符串的首字母大写。


\{num} 与前一字符的num次出现匹配。


现在,我们对脚本逐条讲解,希望能帮助大家理解正则文法。


⑴:%s/ / /


将文件中每行出现的2个空格替换为10个空格。


zhang.fei 430759701022003


diao.chan 651302801225012


guan.yu 342869680413001


xi.shi 120638780214006


liu.bei 210324650708001


⑵:%s/\(............\)\( *\)/\1/


保留行首的12个字符,将其余的空格删除,这样,前两个字段就对齐了。


zhang.fei 430759701022003


diao.chan 651302801225012


guan.yu 342869680413001


xi.shi 120638780214006


liu.bei 210324650708001


⑶:%s/\([A-Za-z][A-Za-z]*\)\(\.\)\([A-Za-z][A-Za-z]*\)/\u\3\2\u\1/


将文件中每行出现的雇员姓名互换,并将首字母大写。


Fei.Zhang 430759701022003


Chan.Diao 651302801225012


Yu.Guan 342869680413001


Shi.Xi 120638780214006


Bei.Liu 210324650708001


⑷:%s/$/ xxxxxx/


在每一行的行尾添加2个空格和6个x


Fei.Zhang 430759701022003 xxxxxx


Chan.Diao 651302801225012 xxxxxx


Yu.Guan 342869680413001 xxxxxx


Shi.Xi 120638780214006 xxxxxx


Bei.Liu 210324650708001 xxxxxx


⑸:%s/\([0-9]\{6}\)\([0-9]\{6}\)\([0-9]\{3}\) \(xxxxxx\)/\1\2\3 \2/


将xxxxxx替换成出生年月日。


Fei.Zhang 430759701022003 701022


Chan.Diao 651302801225012 801225


Yu.Guan 342869680413001 680413


Shi.Xi 120638780214006 780214


Bei.Liu 210324650708001 650708


⑹:%s/\(..\)\(..\)\(..\)$/19\1\/\2\/\3


将年月日用/字符分隔,并在年前添加19。


Fei.Zhang 430759701022003 1970/10/22


Chan.Diao 651302801225012 1980/12/25


Yu.Guan 342869680413001 1968/04/13


Shi.Xi 120638780214006 1978/02/14


Bei.Liu 210324650708001 1965/07/08


⑺:%s/$/ xxxxxx/


在每一行的行尾添加2个空格和6个x


Fei.Zhang 430759701022003 1970/10/22 xxxxxx


Chan.Diao 651302801225012 1980/12/25 xxxxxx


Yu.Guan 342869680413001 1968/04/13 xxxxxx


Shi.Xi 120638780214006 1978/02/14 xxxxxx


Bei.Liu 210324650708001 1965/07/08 xxxxxx


⑻:%s/\([0-9]\{14}[13579]\)\(.*\)\(xxxxxx\)/\1\2male /


身份证号码末位是奇数的,将xxxxxx替换成male


Fei.Zhang 430759701022003 1970/10/22 male


Chan.Diao 651302801225012 1980/12/25 xxxxxx


Yu.Guan 342869680413001 1968/04/13 male


Shi.Xi 120638780214006 1978/02/14 xxxxxx


Bei.Liu 210324650708001 1965/07/08 male


⑼:%s/\([0-9]\{14}[02468]\)\(.*\)\(xxxxxx\)/\1\2female/


身份证号码末位是偶数的,将xxxxxx替换成female


Fei.Zhang 430759701022003 1970/10/22 male


Chan.Diao 651302801225012 1980/12/25 female


Yu.Guan 342869680413001 1968/04/13 male


Shi.Xi 120638780214006 1978/02/14 female


Bei.Liu 210324650708001 1965/07/08 male


⑽:$ 到文件的最后一行


⑾:s/.*/&^M-----------------------------------------------


在文件的最末行插入一行 "-" 字符。


Fei.Zhang 430759701022003 1970/10/22 male


Chan.Diao 651302801225012 1980/12/25 female


Yu.Guan 342869680413001 1968/04/13 male


Shi.Xi 120638780214006 1978/02/14 female


Bei.Liu 210324

首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Fedora下手动编译升级到Kernel2.6.. 下一篇Red Hat9.0 Linux系统下搭建Java..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: