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

在Vim/Neovim中为空格分隔列的指定数字批量加固定值

问题描述

尝试使用Vim命令:s/\d\+/\=submatch(0)+8192为空格分隔格式的文件中某列数字批量加8192,但该命令会选中ATOM后的第二列数字。需要对第五列中从1开始的数字执行加操作,以延续8192的编号序列,文件结构示例如下:

ATOM  32760  MW4 wate 8190       6.520  15.778  26.020  0.00  0.00          Mw4  
ATOM  32761  OW1 wate 8191       6.550  20.128  25.950  0.00  0.00           O  
ATOM  32769  OW1 wate    1      17.610   8.049  75.290  0.00  0.00           O  
ATOM  32773  OW1 wate    2      16.200   7.639  85.230  0.00  0.00           O  

解决方案

方法一:精准匹配第五列数字

使用以下Vim全局替换命令,仅针对第五列的数字执行加8192操作:

:%s/\v^(\S+\s+){4}(\d+)/\1\=submatch(2)+8192/
  • %:对所有行生效
  • \v:开启非常魔法模式,简化正则写法
  • ^(\S+\s+){4}:匹配开头4个完整列(每个列由非空字符\S+和后续空格\s+组成)
  • (\d+):捕获第五列的目标数字
  • \1:保留前面4列的原始内容
  • \=submatch(2)+8192:将捕获的数字加8192后替换原内容

方法二:仅修改小于8192的数字(避免误改已有序列)

如果需要避免改动第五列中已经是8190、8191、8192的行,可添加条件判断:

:%s/\v^(\S+\s+){4}(\d+)/\1\=submatch(2)<8192 ? submatch(2)+8192 : submatch(2)/

该命令会只对第五列中数值小于8192的数字执行加操作,其他数字保持不变,完美延续8192的编号序列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:53:10