《vi中的替换艺术》-linux命令五分钟系列之十一
vi方面的内容不知道分类到哪里好,就放到《Linux命令五分钟系列》里吧!
今天编程,关于栈的一个小例子,其间我需要把”S.”替换为”S->”(替换不包括双引号)。
其实这个不难,不过我觉得应该总结一下vi里的替换技术了,以备以后查阅。
1
所有替换方案都要在冒号“:”状态下书写。
2
如果想将abc替换为xyz,那么就这样
:s/abc/xyz/
不过要特别注意,这个替换只局限于光标所在当前行,而且更糟糕的是它只替换当前行的第一个匹配项。
即,如果此行内容为I write abc, I read xyz and abc. 那么替换后的结果为I write xyz, I read xyz and abc.
3
如果想将一行里的所有匹配都进行替换,那么就这样:
:s/abc/xyz/g
4
如果想将一行里所有的”S.”替换为”S->”,那么就这样:
:s/S\./S->/g
例如,此行S.abc and S->bcd and S.aaa and S..abc为,替换后为S->abc and S->bcd and S->aaa and S->.abc
此处因为点号“.”为特殊匹配符,所以如果想匹配点号,就需要用\放在点号前面,表示取消点号的特殊意义。
5
如果要扩大替换范围,则可以用行数来限制:
如果要替换全文的S.为S->,则:
:1,$s/S\./S->/g
可以看出在s前面加上m,n则表示行的范围,1表示第一行,$表示最后一行。当然你完全可以指定其他行数。
此处,m或n可以用特殊符号”.”或”$”代表,”.”代表当前行,”$”代表最后一行
如果是确定为全文替换,那么可以用%来代替1,$,即:%s/S\./S->/g
6
你可能会发现如果我要匹配一个http://roclinux.cn/index.php会很麻烦阿 因为//符号和/符号都会把替换搞乱。此时,你完全可以用#或者其他任何符号来替换/,如s/abc/xyz/可以替换为s#abc#xyz#,或者 s!abc!xyz!都是可以的!这个是不是很神奇,如果你了解perl的话,你会发现更多非常非常灵活的技巧。呵呵
如此行内容为:http://roclinux.cn/index.php and http:/uuw/faf
使用如下替换命令(此处使用了#):
:s#http://roclinux\.cn/index\.php#http://www\.sohu\.com#
替换后为:http://www.sohu.com and http:/uuw/faf
7
如果我希望把具有日期格式(XXXX-XX-XX)的字符串两侧加上一对单引号,即2008-07-01变成’2008-07-01’,可以这样做。
例如,原来文件内容为:
aaa 2008-07-01 bbb
ccc 2008-07-12 aaa
使用如下替换命令:
:1,$s/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)/’\1’/g
替换后为:
aaa ‘2008-07-01′ bbb
ccc ‘2008-07-12′ aaa
这个替换命令比较复杂,里面有这几个知识点:
第一个知识点:[0-9]表示0到9之间的任一个数字
第二个知识点:\{n\}表示将此符号前面的元素重复n遍,所以[0-9]\{4\}就表示一个四位数的数字
第三个知识点:如果在匹配方案中用到了\(\)则表示要暂存这个匹配内容,而\1就表示要替换为暂存的匹配内容,你仔细看看我给出替换命令,就可以
懂了,我们匹配的如果是2008-07-01,那么加了括号后就会被暂存,而在后面的\1处就会被替换过来,外面再加一对引号,就OK了!
《vi中的替换艺术》-linux命令五分钟系列之十一的更多相关文章
- 《sed的流艺术之一》-linux命令五分钟系列之二十一
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之四》-linux命令五分钟系列之二十四
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之二》-linux命令五分钟系列之二十二
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sed的流艺术之三》-linux命令五分钟系列之二十三
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《paste命令》-linux命令五分钟系列之二十
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《sort帮你排序》-linux命令五分钟系列之二十六
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 《gzip命令》-linux命令五分钟系列之七
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
- 《作业控制系列》-“linux命令五分钟系列”之十
本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == ...
- 《tr命令-优化版》-linux命令五分钟系列之二十五
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
随机推荐
- HDU -- 4496
D-City Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Subm ...
- C# 中的协变和逆变
作为一个从接触 Unity 3D 才开始学习 C# 的人,我一直只了解一些最基本.最简单的语言特性.最近看了<C# in Depth>这本书,发现这里面东西还真不少,即使除去和 Windo ...
- 2015/11/06 社保查询系统持续 挂机ing
- t
http://www.cnblogs.com/courtier/p/4287177.html 360导航_新一代安全上网导航 http://www.cnblogs.com/zhenzi/p/42926 ...
- 机器学习算法库scikit-learn的安装
scikit-learn 是一个python实现的免费开源的机器学习算法包,从字面意思可知,science 代表科学,kit代表工具箱,直接翻译过来就是用于机器学习的科学计算包. 安装scikit-l ...
- 正经学C#_变量与其转换:《c#入门经典》
上一节上了变量.末尾简单了说了下 命名方式,声明变量. 命名方式在C#,或者任何语言都是非常重要的一门学问.值得去深入思考一下.变量名的优化与其工作效率的提升,有很多大的关系的. 声明变量,上节介绍了 ...
- 查看线程linux cpu使用率
Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算 转 http://www.cnblogs.com/lidabo/p/4738113.html目录(?)[-] proc文件系统 p ...
- 教你Mac OS系统四种改动Hosts文件的方法
使用Mac OS X系统的用户.在某些时候可能遇到了须要改动系统Hosts文件的情况,那么Mac OS系统怎样改动Hosts文件呢?和Windows系统有何差别呢?我们知道事实上改动Hosts文件仅仅 ...
- Java基础知识强化02:import static 和 import
1.import static静态导入是JDK1.5中的新特性.一般我们导入一个类都用 import com.....ClassName;而静态导入是这样:import static com..... ...
- CGLIB学习笔记
0 概述 CGLIB基于ASM实现.提供比反射更为强大的动态特性.使用CGLIB可以非常方便的实现的动态代理. 0.1 CGLIB包结构 net.sf.cglib.core 底层字节码处理类. ...