《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了!

时间: 2024-10-12 09:21:43

《vi中的替换艺术》-linux命令五分钟系列之十一的相关文章

《sed的流艺术之一》-linux命令五分钟系列之二十一

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 1 你想过sed为什么叫sed么? sed是stream editor的缩写,sed就是一个流编辑器,说白了,就是我们往sed里输入一串信息,它给我们处理,然后输出来.就这么简单. sed和cut类似,是一个面向行处理的工具,它以“行”为处理单位,处理后的结果会输出到标准输出.所以说其实

《sed的流艺术之二》-linux命令五分钟系列之二十二

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 上文接:<sed的流艺术之一>-linux命令五分钟系列之二十一 5 sed中有选项么?有没有什么比较常用的? sed最主要的就是command部分,把这部分玩转了,你就已经很厉害了,而玩转这部分的前提是玩转正则表达式.尽管如此,sed的选项部分的-n选项仍然是非常重要,理解

《sed的流艺术之三》-linux命令五分钟系列之二十三

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 上文接:<sed的流艺术之二>-linux命令五分钟系列之二十二 例五 给某些字符串后面插入些内容 [[email protected] programming]$ cat mysed.txt Beijing London[[email protected] programm

《paste命令》-linux命令五分钟系列之二十

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 在本系列上一篇文章中涉及到了cut命令(<cut命令>-linux命令五分钟系列之十九),本文章介绍的这个paste命令,是一个专门和cut对着干的命令,作用是将几个文件拼凑在一起. 1 paste的拼凑原理是什么? 这个很简单,和cut的原理几乎一样,就是将几个文件的相应行

《gzip命令》-linux命令五分钟系列之七

本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == 转移到linux之后的一大痛苦就是压缩和解压缩,今天的主题是“压缩和解压工具gzip”. 五分钟教会你linux压缩和解压大法-- 1 下载了一个源码文件abc.tar.gz或abc.tgz(后缀tar.gz和tgz基本没啥区别,相同的还有.taz和.tar.Z) # tar -xzvf abc.tar.g

《sort帮你排序》-linux命令五分钟系列之二十六

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === 好久没写技术文章了,对不住大家.今天送上sort帮你排序,以资共享.:) [正文开始] sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行

《作业控制系列》-“linux命令五分钟系列”之十

本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == 很久没发这个系列了.一直在看perl.现在回归.因为发现所有的脚本的基础都是linux命令… === 通俗的讲,作业控制命令是用来控制一个一个任务的. 1 我想把updatedb命令(用于重新建立整盘索引的命令)放在后台运行.因为我不想眼睁睁的看着机器建立索引,我还想编会儿程序呢: # updatedb &

《ln命令》-linux命令五分钟系列之十八

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] ln是一个很神奇的命令,它可以创建一个文件的影子,也可以通过一个通道进入另一个地方.:)其实,所有的这些把戏都是通过软连接和硬连接实现的. 我们假设你已经阅读了“硬连接和软连接的原理-<别怕Linux编程>之七”这篇文章,并且对其原理有比较透彻的认识.下面开始ln命令的情景举

《service》-“linux命令五分钟系列”之二

本原创文章属于<Linux大棚>博客. 博客地址为http://roclinux.cn. 文章作者为roc 希望您能通过捐款的方式支持Linux大棚博客的运行和发展.请见“关于捐款” == service命令,顾名思义,就是用于管理Linux操作系统中服务的命令. 1. 声明:这个命令不是在所有的linux发行版本中都有.主要是在redhat.fedora.mandriva和centos中. 2. 此命令位于/sbin目录下,用file命令查看此命令会发现它是一个脚本命令. 3. 分析脚本可知