仅在每行末尾的数字之间添加括号

仅在每行末尾的数字之间添加括号

我有一个文件,其行如下:

ram_reg_10/raja_reg_9/raghu_reg_8  
abc_reg_4/bcd_reg_5  
cad/pqr_reg_91 

我想在 vi 编辑器中的每行最后将字符串“_reg_number”转换为 [number]。
输出应该是:

ram_reg_10/raja_reg_9/raghu[8]  
abc_reg_4/bcd[5]  
cad/pqr[91]  

我试过:

:%s?_reg_[0-9]$?\[[0-9]\]?g

但它给出了:

ram_reg_10/raja_reg_9/raghu[[0-9]]  
abc_reg_4/bcd[[0-9]]  
cad/pqr_reg_91

怎么做?

答案1

在命令模式下:

:%s/_reg_\([0-9]\+\)$/[\1]/

这里我们用来\+匹配末尾的一组或多组数字。所以我们没有像这样的行替代cad/pqr_reg_

答案2

只需使用这个:

:%s/_reg_\([0-9]*\)$/[\1]/

也就是说,用 捕获数字\(\)然后用 打印回来\1。另请注意,没有必要/g,因为每行只需执行一次。

相关内容