我有一个包含不同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'
答案 0 :(得分:2)
要增加IP,您可以使用此正则表达式:
perl -lpe 's/((\d{1,3}\.){3})(\d{1,3})/$1 . ($3 + 1)/eg' FILE
要增加'name example101',您可以尝试类似的表达式。
答案 1 :(得分:0)
使用?!
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)
部分
UPDATE:添加了部分s/(example)(\d{3})/$1.($2 + 1)/eg;
以增加输入字符串example101,使其成为example102。
答案 2 :(得分:0)
我可以在Vim中以交互方式在几秒钟内完成此操作。在Vim中,Ctrl-A
增加光标下的数字。搜索IP地址,转到最后一个八位字节,递增。在注册a
下的键盘宏中录制,调用@a
,然后按住@@
再重复N次。
以下是确切的按键:
开始录制:
qa
搜索下一个IPv4地址的开头:
/\([0-9]\+\.\)\{3\}[0-9]\+[Enter]
在最后一个八位位组前跳转到点(前进3点到点):
3f.
增量:
Ctrl-A
完成录制:
q
现在,再次运行宏:
@a
重复(按住@键进行自动重复):
@@
如果您注意到您编辑了一个IP,那么您不应该只使用u
根据需要多次撤消,请跳过它,然后从那里开始。
答案 3 :(得分:0)
此命令行程序会增加除IP地址10.0.0.130
以外的所有数字(包括文件编号)。如果要忽略多个或两个地址,则此方法将变得难以处理,您应该执行诸如将所有不可变地址放在文件或程序的__DATA__
部分中的操作。
perl -pe "s/(\d+)('\s*)$/($1+1).$2/e unless /\b\Q10.0.0.130\E\b/" ipfile
<强>输出强>
'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.130'
修改强>
要向修改添加第二个排除项,此命令还会保护0.0.0.0
perl -pe "s/(\d+)('\s*)$/($1+1).$2/e unless /\b\Q10.0.0.130\E|\Q0.0.0.0\E\b/" ipfile