我有一个文件,例如,如下:
HEAD 100 ABC 12 24 12.5
HEAD 101 ABC 10 20 11.9
HEAD 102 ABC 13 18 15.4
HEAD 103 ABC 14 21 17.6
HEAD 104 ABC 16 23 13.4
我怎样才能在每一行的第2列添加一个数字(如5)?它将是
HEAD 105 ABC 12 24 12.5
HEAD 106 ABC 10 20 11.9
HEAD 107 ABC 13 18 15.4
HEAD 108 ABC 14 21 17.6
HEAD 109 ABC 16 23 13.4
我尝试在vi命令模式下执行此操作,我尝试
:%s/\d\+/\=submatch(0)+1/g
但它会添加行中的每个数字。
感谢!!!
答案 0 :(得分:3)
你非常接近,但是不要使用全局匹配,而是使用:
:%s/\d\+/\=submatch(0)+5/
这只会替换第一个匹配(在这种情况下是所需的第二列)。
输出:
HEAD 105 ABC 12 24 12.5
HEAD 106 ABC 10 20 11.9
HEAD 107 ABC 13 18 15.4
HEAD 108 ABC 14 21 17.6
HEAD 109 ABC 16 23 13.4
答案 1 :(得分:3)
或者,在块可视模式(Ctrl-V
)中选择要递增的数字:
HEAD 100 ABC 12 24 12.5 HEAD 101 ABC 10 20 11.9 HEAD 102 ABC 13 18 15.4 HEAD 103 ABC 14 21 17.6 HEAD 104 ABC 16 23 13.4
然后按键:5 Ctrl-A
视觉方法很快,但是举另一个例子假设您想要输出:
HEAD 150 ABC 12 24 12.5
HEAD 151 ABC 10 20 11.9
HEAD 152 ABC 13 18 15.4
HEAD 153 ABC 14 21 17.6
HEAD 154 ABC 16 23 13.4
将数字加5到第7列。您可以将可视方法与50 Ctrl-A
一起使用。或使用特定列匹配(\%c
):
%s/\%>6c\%<8c\d/\=+5/