Perl 用于更改IP和保存新文件的shell脚本
我有一个包含不同IP地址的文本文件。我需要写一个脚本来找到IP的行(还有其他行),并将最后一个数字增加1。这应该做50次 这意味着将保存50个新文件。我不想使用该逻辑转到行号并替换特定字符 文件名也存在于文件中,应再次增加1。我正在使用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
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的另一个例外。我已编辑了我的答案,以显示如何添加第二个地址,以排除修改。
@@