You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux/Vim 如何查找替换匹配字符串时排除匹配内容的最后一个字符

单步实现方案

你可以直接使用Vim正则的捕获组功能实现单步替换,命令如下:

:%s/savings\([A-Za-z]\)/savings.\1/g

命令逻辑说明

  • \([A-Za-z]\) 是正则捕获组,会匹配savings后面紧跟的1个英文字母,同时将这个字母暂存到标记\1中
  • 替换逻辑为:保留匹配到的savings,在后面追加.,再把捕获到的字母\1拼接回去
  • 该匹配逻辑只会命中savings后接英文字母的场景,不会影响savings后接下划线的行,完全符合需求

通用场景下排除指定字符的替换方法

有两种常用的实现思路:

  • 捕获组法:把需要保留的字符用\(和\)包裹为捕获组,替换时通过\1、\2这类标记直接引用保留的内容即可,相当于间接排除了不需要修改的部分,这是兼容性最好、最通用的方案。
  • 零宽边界标记法:可以用Vim正则里的\zs(匹配起始位置)、\ze(匹配结束位置)标记实际需要替换的区间,标记外的内容只会作为匹配条件,不会被纳入替换范围,也能实现排除指定字符的效果。比如本次需求也可以写为:
    :%s/savings\ze[A-Za-z]/savings./g
    
    这里\ze后面的[A-Za-z]仅作为匹配判断条件,不会被替换,也能达到同样效果。

内容的提问来源于stack exchange,提问作者Parm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:36:01