[求助] Shell/Vim 中如何实现对符合特定条件的行进行替换操作? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiaslbang
V2EX    Vim

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

  •  
  •   jiaslbang 2015-10-08 12:31:09 +08:00 3711 次点击
    这是一个创建于 3663 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    17 条回复    2015-10-08 18:07:27 +08:00
    lujiajing1126
        1
    lujiajing1126  
       2015-10-08 12:49:48 +08:00
    shell 的话 sed+awk

    vim 的话可以正则搜索替换吧
    jprovim
        2
    jprovim  
       2015-10-08 12:52:12 +08:00   1
    doun
        3
    doun  
       2015-10-08 13:09:13 +08:00 via Android
    这个太牛
    halfcrazy
        4
    halfcrazy  
       2015-10-08 13:36:11 +08:00
    :%s/pattern_here/after_replacing/g

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

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

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

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

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

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

    =.=
    zhantss
        15
    zhantss  
       2015-10-08 16:05:58 +08:00
    @lonelinsky
    (□′)┻━┻
    别拦着我 我要调外部脚本了
    jiaslbang
        16
    jiaslbang  
    OP
       2015-10-08 18:06:22 +08:00
    @zhantss 哈哈大爱你的风格,一定是妹子+高级萌
    jiaslbang
        17
    jiaslbang  
    OP
       2015-10-08 18:07:27 +08:00
    @lonelinsky 宏是个好方法,我还需要点时间适应,多谢啦!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     876 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:21 PVG 04:21 LAX 13:21 JFK 16:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86