V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
ioioioioioi
V2EX  ›  Linux

如何使用 sed 替换同一行中的两个 pattern 之间的字段

  •  
  •   ioioioioioi · 2019-09-30 06:01:18 +08:00 · 4398 次点击
    这是一个创建于 1875 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需要把 aaa-bbb-ccc 中的 bbb 匹配出来再替换,用 /aaa/(.*)/-ccc/ 这种格式会把 aaa-和-ccc 一起匹配进去,最后还得再后面的替换部分把 aaa-和-ccc 写上,如果这两个部分很长就会写的很难看,请问有什么办法只替换指定一段不要和匹配字段一起替换掉.谢谢

    12 条回复    2019-10-05 15:30:24 +08:00
    dodorz
        1
    dodorz  
       2019-09-30 07:55:08 +08:00 via Android
    /aaa/(.*?)/-ccc/
    xinhangliu
        2
    xinhangliu  
       2019-09-30 08:03:56 +08:00 via Android
    aaa-\zsbbb\ze-ccc
    xinhangliu
        3
    xinhangliu  
       2019-09-30 08:05:00 +08:00 via Android
    抱歉看成 vim 了
    pagxir
        4
    pagxir  
       2019-09-30 08:13:28 +08:00 via Android
    可以用后向引用吧
    lovestudykid
        5
    lovestudykid  
       2019-09-30 08:20:48 +08:00
    好像没啥办法,不过你可以把前后匹配上,然后用\1 \2 来引用
    lovestudykid
        6
    lovestudykid  
       2019-09-30 08:21:36 +08:00
    @pagxir 试了一下,好像并不可以(?:)(?<=)
    hanminghui
        7
    hanminghui  
       2019-09-30 08:27:55 +08:00 via Android
    没记错的话,可以用\(aaa\)...\(ccc\)按 part 匹配,替换那里用\1...\2 这种
    wweir
        8
    wweir  
       2019-09-30 08:31:44 +08:00 via Android
    sed 's/(aaa)-bbb(-ccc)/\1-ddd\2/'
    citrix
        9
    citrix  
       2019-09-30 18:42:27 +08:00 via Android
    用 perl -pie 替换 sed -i 吧,然后就可以用零宽断言了
    ps1aniuge
        10
    ps1aniuge  
       2019-10-01 00:00:36 +08:00
    说实话,我没看懂要找 [什么] ,替换成 [神马]

    ps 找算替.ps1 ,即 powershell 版的 sed。是一个查找替换工具软件。

    1 找、算、替、是啥意思?
    1.1 找
    1.2 算
    即你可以自己编写函数,用来处理找到的结果,函数运行完毕后,产生要 [替] 的字符串。
    1.3 替

    区分大小写! 不支持正则!

    《 ps 找算替 v3 》 下载地址:
    https://pan.baidu.com/s/1yuqUOhY9lEw65vJ-vceg4w

    win,linux 通用。
    《 ps 找算替 v3 》使用手册:
    下载地址中,有个《 ps 找算替_v3_readme.html 》
    yrand
        11
    yrand  
       2019-10-02 16:03:24 +08:00
    用 awk 简单点
    savage455
        12
    savage455  
       2019-10-05 15:30:24 +08:00
    echo "aaa-bbb-ccc" |sed 's/-[^_].*-/-ANYTHING_YOU_WANT-/'
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1737 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:26 · PVG 00:26 · LAX 08:26 · JFK 11:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.