在VIM中使用Regex重用字符串的一部分并替换另一部分

ylamdve6  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(187)

真的很困惑,我没想到会问这个问题,但这里。
在侧VIM中,并且仅在VIM中,我想执行全局搜索和替换。我的目标文本是:

51099   analgesic
43045   analgesic
70145   analgesic
52338   analgesic
41214
55309
34373
47003
50659
51327

这会持续数千行。对于所有没有以“\tanalgesic”结尾的行(注意制表符),我希望保留行号并插入“\tanalgesic”。我尝试了几种方法,但都不起作用(显然)。
在VIM之外(在一个通用的正则表达式检查器中),[0-9]+$查找所有**“一个或多个数字和行尾”**“的示例。在VIM内,这不起作用(:/将被添加来表示进入命令模式,然后“/”进行搜索)。我很困惑为什么会出现这种情况。
虽然这不起作用,但我希望解决方案看起来类似:

:%s/[0-9]+$/(1)\tanalgesic/g
5t7ly7z5

5t7ly7z51#

例如,您可以将vim very magic mode与\v一起使用
使用\1作为对组1的反向引用。

:%s/\v(\d+$)/\1\tanalgesic/g

该命令没有非常神奇的模式,带有转义括号表示组,转义加号表示量词:

%s/\([0-9]\+$\)/\1\tanalgesic/g
|  |      |     |             |
|  |      |     |             ^ All occurrences 
|  |      |     ^^ Backreference to group 1
|  |      ^^ Escaped plus sign
|  ^^ Escaped parenthesis for group 1
^ Substitute in whole file

产出

51099    analgesic
43045    analgesic
70145    analgesic
52338    analgesic
41214    analgesic
55309    analgesic
34373    analgesic
47003    analgesic
50659    analgesic
51327    analgesic

有关详细信息,请参见http://vimregex.com/

相关问题