Perl 用于更改IP和保存新文件的shell脚本

Perl 用于更改IP和保存新文件的shell脚本,perl,bash,sed,awk,Perl,Bash,Sed,Awk,我有一个包含不同IP地址的文本文件。我需要写一个脚本来找到IP的行(还有其他行),并将最后一个数字增加1。这应该做50次 这意味着将保存50个新文件。我不想使用该逻辑转到行号并替换特定字符 文件名也存在于文件中,应再次增加1。我正在使用sed,但无法实现正确的循环和选项 输入文件为示例1: 'name example101' 'ip-address 10.255.255.13' state enabled 'ip-address 10.255.253.45' 'ip-address

我有一个包含不同IP地址的文本文件。我需要写一个脚本来找到IP的行(还有其他行),并将最后一个数字增加1。这应该做50次

这意味着将保存50个新文件。我不想使用该逻辑转到行号并替换特定字符

文件名也存在于文件中,应再次增加1。我正在使用
sed
,但无法实现正确的循环和选项

输入文件为示例1:

 '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):


要增加IP,可以使用以下正则表达式:

perl -lpe 's/((\d{1,3}\.){3})(\d{1,3})/$1 . ($3 + 1)/eg' FILE

要增加“name example101”,您可以尝试类似的表达式。

使用
忽略特定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/(示例)(\d{3})/$1.($2+1)/eg
增加输入字符串example101,使其成为example102。

我可以在Vim中以交互方式在几秒钟内完成此操作。在Vim中,
Ctrl-A
增加光标下的数字。搜索IP地址,转到最后一个八位字节,递增。在寄存器
a
下的键盘宏中录制,以
@a
的形式调用,然后按住
@
再重复N次

以下是准确的击键:

开始录制:

qa
 q
搜索下一个IPv4地址的起始地址:

 /\([0-9]\+\.\)\{3\}[0-9]\+[Enter]
在最后一个八位字节之前跳到点(向前跳到点的3倍):

增量:

 Ctrl-A
完成录制:

qa
 q
现在,再次运行宏:

 @a
重复(按住@键可自动重复):


如果注意到您编辑了一个不应该使用的IP,只需使用
u
根据需要多次撤消即可,跳过它,然后从那里开始。

此命令行程序会增加除IP地址
10.0.0.130
之外的所有数字(包括文件号)。如果要忽略一个或两个以上的地址,则此方法将变得非常笨拙,您应该将所有不可变的地址放在一个文件或程序的
\uu DATA\uu
部分中

perl-pe“s/(\d+)('\s*)$/($1+1)。$2/e除非/b\Q10.0.0.130\e\b/”ipfile
输出

“名称示例102”
'ip地址10.255.255.14'
状态启用
'ip地址10.255.253.46'
'ip地址10.255.255.14'
“ip地址10.0.0.130”

编辑

要在修改中添加第二个排除项,此命令还将保护
0.0.0

perl-pe“s/(\d+)('\s*)$/($1+1)。$2/e除非/b\Q10.0.0.130\e |\Q0.0.0\e\b/”ipfile

perl-lpe的/(\d{1,3}\){3})(\d{1,3})/$1。($3+1)/eg'工作正常,但我注意到我应该忽略文件中的特定ip?它不工作。这似乎不是一个通用的解决方案;它改变了一些IP,而不是其他IP。还在考虑如何添加一个选项,使example101 example102在文件的多行中。@Ephieste-它没有为您运行,因为您的输入文件中的
ip地址之后一定有不同数量的空格。现在检查。@Ephieste-添加了example101的选项。请检查.perl-lpe的/(\d{1,3}){3})(\d{1,3})/$1 . ($3+1)/eg除非/\b\Q10.255.244.12\E\b/;s/(例如)(\d{3})/$1.($2+1)/eg;'示例101>>示例102此组合解决了我的问题,但我必须添加“除非”语句以忽略一个ip。我也会尝试to@Ephieste-好的。那也很好。你可以自己发布答案。如果上面的输入在一行中,则会失败。谢谢,除非正在工作,否则我需要ip 0.0.0.0的另一个例外。我已编辑了我的答案,以显示如何添加第二个地址,以排除修改。
 @@