如何使用vim有条件地替换数字

3

我看到很多关于如何使用:%s有条件地替换字符串的讨论。但我想在一个包含大量CSV格式数字的文件中实现以下操作:

  1. 查找数值< -100
  2. 将其替换为-98

我该如何在VIM或其他编辑器/脚本语言中实现此操作?


如果您像在字符串/文本中使用:%s一样使用它,它是否有效? - Wanda Ichsanul Isra
请问您能否详细说明一下?问题在于,这几乎就像Excel公式:if(X<-100,-98,X) - 有没有办法在VIM中实现它? - Badri Narayanan Gopalakrishnan
哦,抱歉,误解了。我认为你无法做那种公式的事情。毕竟,vim只是一个文本编辑器。 - Wanda Ichsanul Isra
1个回答

5
可以使用 submatch() 函数来实现,方法如下:
:%s/-[0-9]\+/\=submatch(0) < -100 ? -98 : submatch(0)/g

现在,小于-100的所有数字将被替换为-98,其余数字保持不变。请注意,此正则表达式仅匹配负数。

1
匹配“每个数字”可能需要最终的/g标志。 - Luc Hermitte
真的!谢谢你注意到了! - Sander Vanhove
非常感谢,这非常有帮助! - Badri Narayanan Gopalakrishnan
@BadriNarayananGopalakrishnan 很棒,它帮助了你!如果这是你想要的答案,请随意接受它 :) - Sander Vanhove
1
哇,真是个隐藏的宝藏。感谢你提供这个子匹配的信息。 - Wanda Ichsanul Isra
@SanderVanhove 再次感谢您 - 我在这里不是很频繁 - 所以我错过了您的跟进。抱歉回复晚了,但确实这正是我要找的。已接受答案。 - Badri Narayanan Gopalakrishnan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接