如何在VIM中从字符串后面的数字中减去?

如何在VIM中从字符串后面的数字中减去?,vim,Vim,我试图从VIM中字符串后面的数字中减去,例如,这个(搜索的)输入: CustomModelData:1 以及我的首选(替换)输出: CustomModelData:-2147483647 我试图从这些数字中减去的数字是2147483648。我试着在VIM中使用它,但它不起作用,因为表达式中有一个字符串,我想保留该字符串,同时从下面的数字中减去: :%s/CustomModelData:\d\+/\=/CustomModelData:submatch(0)-2147483648/g您可以使用以下微

我试图从VIM中字符串后面的数字中减去,例如,这个(搜索的)输入:

CustomModelData:1

以及我的首选(替换)输出:

CustomModelData:-2147483647

我试图从这些数字中减去的数字是2147483648。我试着在VIM中使用它,但它不起作用,因为表达式中有一个字符串,我想保留该字符串,同时从下面的数字中减去:


:%s/CustomModelData:\d\+/\=/CustomModelData:submatch(0)-2147483648/g

您可以使用以下微调使匹配从数字开始,以便替换者只看到要调整的数字

%s/\vCustomModelData: \zs\d+/\=submatch(0)-2147483648/g
  • \zs

如果每个数字都在文件的单独一行上,则可以匹配相关行并对其使用
Ctrl
+
X
减法运算符:

:g/CustomModelData:/ norm 2147483648^X

(对于
^X
,键入
Ctrl
+
X

您必须使用vim解决此问题吗?像awk这样的工具可以做得更好:
awk-F':''BEGIN{OFS=“:”}{print$1,$2-2147483648}'数据文件
不,我从来没有考虑过使用awk,我会尝试一下。我尝试输入命令,结果出现了这个错误:awk:cmd。行:1:BEGIN{OFS=:awk:cmd.line:1:^语法错误errcount:1您可以尝试
awk-F':''BEGIN{OFS=FS}{print$1,$2-2147483648}数据文件
它似乎可以工作,但似乎无法贯穿整个文件(它只执行第一个),而且,我必须在第一个冒号之前添加“CustomModelData”才能工作。