This question already has answers here:
grep + match exactly IP address with Regular Expression
(4个答案)
7年前关闭。
以下perl one班轮代码的目标是替换前三个八位位组(如果四个八位位组是digit / number-xxx.xxx.xxx.digit)
备注-我使用linux和solaris机器
问题是,当四个八位位组IP无效IP八位位组时,perl one衬里也会替换前三个八位位组(例如5.5.5.555)
下面的perl一个线性代码示例显示了perl语法如何替换了前三个八位字节,尽管这四个八位字节不是有效IP
请告诉我需要在我的perl中添加一个班轮代码,
为了替换前三个八位位组
仅当四个八位位组为有效IP(0 – 255之间)时
这种方式比检查从0到255的有效最终八位字节要容易得多,后者看起来像
(4个答案)
7年前关闭。
以下perl one班轮代码的目标是替换前三个八位位组(如果四个八位位组是digit / number-xxx.xxx.xxx.digit)
备注-我使用linux和solaris机器
问题是,当四个八位位组IP无效IP八位位组时,perl one衬里也会替换前三个八位位组(例如5.5.5.555)
下面的perl一个线性代码示例显示了perl语法如何替换了前三个八位字节,尽管这四个八位字节不是有效IP
# export OLD_IP=1.1.1
# export NEW_IP=5.5.5
# echo 1.1.1.555 | perl -i -pe 'next if /^ *#/; s/(?<![\d.])\Q$ENV{OLD_IP}\E(?=\.\d)/$ENV{NEW_IP}/g'
5.5.5.555
请告诉我需要在我的perl中添加一个班轮代码,
为了替换前三个八位位组
仅当四个八位位组为有效IP(0 – 255之间)时
最佳答案
如果最后一个八位位组始终只是一个数字,则可以执行与模式开始时相同的操作,并确保第一个八位位组之后没有数字。
s/(?<![\d.])\Q$ENV{OLD_IP}\E(?=\.\d(?!\d))/$ENV{NEW_IP}/g
这种方式比检查从0到255的有效最终八位字节要容易得多,后者看起来像
s/(?<![\d.])\Q$ENV{OLD_IP}\E(?=\.(?:1?\d?\d|2[0-4][0-9]|25[0-5])(?!\d))/$ENV{NEW_IP}/g
09-11 13:13