在VIM中递增多个IP地址

时间:2012-06-01 13:15:49

标签: vim replace increment

我想编辑我的主机文件以匹配我当前的IP,我可以用Python或AWK来做,但我想知道VIM中是否有办法......

让我们看看我的意思,我的主人看起来像那样:

192.168.11.172    blazer blazer.mydomain
192.168.11.173    faster faster.mydomain
...
192.168.11.225    schurtig schurtig.mydomain

现在,我想将每个IP增加32,因此最终结果为:

192.168.11.202    blazer blazer.mydomain
192.168.11.203    faster faster.mydomain
...
192.168.11.257    schurtig schurtig.mydomain

如果我将光标放在正确的IP上,然后输入

  

30和CTRL + A

它做我想要的。

唯一的问题,我有大约300名主持人......我需要每3个月做一次...... 虽然我可以在Python中使用,但是看到vim 中的文件感觉更安全,因为我不需要运行脚本然后在此之后控制结果。

以下仅更改第一行:

let i=172 | g/172/s//\=i+30/

我想在一个循环中重复这个,不同的IP范围可以说我应该增加多少次,是否有一个“技巧”可以做到这一点?

先谢谢你的努力, 盎司

3 个答案:

答案 0 :(得分:3)

我当然不是vim专家(但是),但我会这样做([]显示光标位置)

192.168.11.[1]72    blazer blazer.mydomain
192.168.11.173    faster faster.mydomain
...
192.168.11.225    schurtig schurtig.mydomain

qa(启动名称为a的宏)。进行修改(例如30 CTRL-A)。光标现在应该在这里:

192.168.11.20[2]    blazer blazer.mydomain
192.168.11.173    faster faster.mydomain
...
192.168.11.225    schurtig schurtig.mydomain

b开头:

192.168.11.[2]02    blazer blazer.mydomain
192.168.11.173    faster faster.mydomain
...
192.168.11.225    schurtig schurtig.mydomain

j(或向下箭头)转到下一个要更改的号码的开头:

192.168.11.202    blazer blazer.mydomain
192.168.11.[1]73    faster faster.mydomain
...
192.168.11.225    schurtig schurtig.mydomain

q以终止宏定义。

现在剩下53张IP,你只需要重复53次:53@a

答案 1 :(得分:3)

试试这个:

:let i=30 | %s/^\(\d*\.\d*\.\d*\.\)\(\d*\)/\=submatch(1).(submatch(2)+i)

\(\d*\.\d*\.\d*\.\)(由submatch(1)检索)与IP匹配前三个数字和点(例如192.168.11.)和\(\d*\)(由submatch(2)检索)匹配IP最后号码。

我认为这是控制它的更好方法:

:let i=30 | %s/^\(\d*\.\d*\.\d*\.\)\(\d*\)/\=submatch(1).(submatch(2)+i)/gc

答案 2 :(得分:3)

可以使用以下替换命令。

:%s/\(\d\+\.\)\{3}\zs\d\+/\=submatch(0)+30/g