jiaslbang
V2EX  ›  Vim

[求助] Shell/Vim 中如何实现对符合特定条件的行进行替换操作?

  •  
  •   jiaslbang · Oct 8, 2015 · 4345 views
    This topic created in 4054 days ago, the information mentioned may be changed or developed.

    接触 Shell/Vim 不久,这个问题一直没找到解决方案

    比如说对某个文件,以 print 开头的所有行中的 aaa 替换成 bbb (是直接对原文件修改)
    (其他不以 print 开头的行中也有 aaa ,不能替换掉)

    简单来说就是:筛选+替换

    用 Shift/Ctrl+V 进行区域替换我是会的,但是一直没搞清楚怎样筛选后替换

    17 replies  •  2015-10-08 18:07:27 +08:00
    lujiajing1126
    lujiajing1126
    Oct 8, 2015
    1
    shell 的话 sed+awk

    vim 的话可以正则搜索替换吧
    doun
    doun
    Oct 8, 2015 via Android
    3
    这个太牛
    halfcrazy
    halfcrazy
    Oct 8, 2015
    4
    :%s/pattern_here/after_replacing/g

    或者可以试试用 q 录制宏,这样就不用写正则了。不过这个用法的场景不一定合适
    zhantss
    zhantss
    Oct 8, 2015
    5
    光用替换的话因为不确定有多少个 aaa 用个稍微有点笨的方法吧

    :%s/^print\(.\+\)aaa/print\1bbb/g

    跑个十来遍遍就好啦 反正你一行也不会有这么多 aaa 的吧 (苦笑)
    泥垢了(╯‵□′)╯︵┻━┻
    zhantss
    zhantss
    Oct 8, 2015
    6
    噢 那个\+换成*
    yyai3
    yyai3
    Oct 8, 2015
    7
    sed -i -e '/^print/ s/aaa/bbb/g' file
    jiaslbang
    jiaslbang
    OP
    Oct 8, 2015
    8
    @lujiajing1126 sed+awk 我几乎没用过,能不能麻烦前辈指点一下怎样实现 [选定以 print 开头的所有行并将 aaa 替换成 bbb] 的效果?
    jiaslbang
    jiaslbang
    OP
    Oct 8, 2015
    9
    @jprovim 原来 g 是可以和 s 连用的,多谢前辈!

    :g/^print/s/aaa/bbb/g

    测试有效!
    jiaslbang
    jiaslbang
    OP
    Oct 8, 2015
    10
    @halfcrazy 可能是我表达不清,就是想先匹配 print 开头的所有行,用 g+s 的方法我已经解决了这个问题,参考我在上面的回复,不过也是非常感谢!
    jiaslbang
    jiaslbang
    OP
    Oct 8, 2015
    11
    @zhantss 哈哈,你的方法好萌,我觉得是可以 work 的,不过从效率上是有优化空间的……推荐你用 g+s 的方法,参见我楼上的回复,多谢啦:D
    jiaslbang
    jiaslbang
    OP
    Oct 8, 2015
    12
    @yyai3 哈,原来这样也可以,多谢大神!
    zhantss
    zhantss
    Oct 8, 2015
    13
    @jiaslbang
    Power of G 那个我的确看到了
    但是我总不能回句支持就撤了吧
    不行 这不符合我的风格 我一定要说点什么
    于是.....
    lonelinsky
    lonelinsky
    Oct 8, 2015
    14
    @zhantss
    @jiaslbang
    其实用宏也满赞的

    gg
    qa
    /^print<cr>
    :s/aaa/bbb/g<cr>
    q
    gg
    9999@a

    =.=
    zhantss
    zhantss
    Oct 8, 2015
    15
    @lonelinsky
    (╯‵□′)╯︵┻━┻
    别拦着我 我要调外部脚本了
    jiaslbang
    jiaslbang
    OP
    Oct 8, 2015
    16
    @zhantss 哈哈大爱你的风格,一定是妹子+高级萌
    jiaslbang
    jiaslbang
    OP
    Oct 8, 2015
    17
    @lonelinsky 宏是个好方法,我还需要点时间适应,多谢啦!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2364 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 03:35 · PVG 11:35 · LAX 19:35 · JFK 22:35
    ♥ Do have faith in what you're doing.