zoukankan      html  css  js  c++  java
  • 《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了!

  • 相关阅读:
    11. 盛最多水的容器
    820. 单词的压缩编码
    72. 编辑距离
    10041-回文数
    第六章-希尔排序和堆排序
    第六章-快速排序、合并排序
    第六章 排序-冒泡,选择,插入排序
    第四章-二叉树的运用-AVL平衡二叉树
    第四章-二叉树的运用-排序二叉树的代码
    第四章-二叉树的代码 、二叉树前序中序后序遍历、及运用
  • 原文地址:https://www.cnblogs.com/qionghua520/p/4382668.html
Copyright © 2011-2022 走看看