我有一个包含不同IP地址的文本文件。我需要写一个脚本来找到与IP的行(还有其他行),并增加最后一个数字为1。这应该做50次!
这意味着将有50个新文件需要保存。我不想使用逻辑转到行号并替换特定的字符。
同样,文件名也存在于文件中,应该再次加1。我正在使用sed,但无法实现正确的循环和选项。
输入文件为example1:
'name example101'
'ip-address 10.255.255.13'
state enabled
'ip-address 10.255.253.45'
'ip-address 10.255.255.13'
'ip-address 10.0.0.130'第一个新文件是example102 (最后一个将是example150):
'name example102'
'ip-address 10.255.255.14'
state enabled
'ip-address 10.255.253.46'
'ip-address 10.255.255.14'
'ip-address 10.0.0.131'发布于 2012-04-17 14:01:35
要增加IP地址,可以使用下面的regex:
perl -lpe 's/((\d{1,3}\.){3})(\d{1,3})/$1 . ($3 + 1)/eg' FILE要增加'name example101‘,你可以尝试一个类似的表达式。
发布于 2012-04-17 22:26:41
使用?!忽略特定ip
perl -lpe 's/((ip-address\s+(?!10\.255\.253\.45)((\d{1,3}\.){3}))(\d{1,3}))/$2.($5 + 1)/eg;s/(example)(\d{3})/$1.($2 + 1)/eg;' FILE在(?!10\.255\.253\.45)部件中添加要忽略的ip
更新:添加了部分s/(example)(\d{3})/$1.($2 + 1)/eg;,以增加输入字符串example101,使其成为example102。
发布于 2012-04-17 23:36:01
在Vim中,我可以在几秒钟内以交互方式完成此操作。在Vim中,Ctrl-A递增光标下的数字。搜索IP地址,转到最后一个八位字节,递增。在寄存器a下的键盘宏中记录,以@a身份调用,然后通过按住@@键重复N次。
以下是准确的击键操作:
开始录制:
qa搜索下一个IPv4地址的起始地址:
/\([0-9]\+\.\)\{3\}[0-9]\+[Enter]跳到最后一个二进制八位数之前的点(向前3倍到点):
3f.增量:
Ctrl-A完成录制:
q现在,再次运行宏:
@a重复(按住@键自动重复):
@@如果你注意到你已经编辑了一个IP,你不应该只使用u来多次撤销,跳过它,然后从那里开始。
https://stackoverflow.com/questions/10185726
复制相似问题