Perl 查找并替换字符串中的 IP 地址

问题描述 投票:0回答:1

我需要 Perl 脚本的帮助来查找和替换保存到字符串或文件中的 IP 地址(如果存在 IP 地址)。

首先道歉 - 我没有开发/软件背景,但通过研究和反复试验成功更新和修改了一些 Perl 脚本。我很犹豫要不要发布,但是,这个编程任务的解决方案根本无法解决我。

我看过一些查找和提取 IP 地址的示例,请参阅下面的使用 .但我还没有弄清楚如何应用 Regexp::Common:net 从字符串或文件中读取。

#!/usr/bin/perl -w

use strict;
use warnings;
use Regexp::Common qw/net/;

my $Event_text="This is a test string with an IP address 10.10.10.20"

while (<DATA>)
{
    print $1, "\n" if /($RE{net}{IPv4})/;
}

__DATA__
10.10.10.10

执行此操作确实会返回“10.10.10.10”,并且它会忽略无效的 IP,但我仍然需要脚本来: (a) 搜索已保存到变量或文件中的字符串(其中之一 - 无关紧要) (b) 以某种方式用其他字符串替换该 IP 地址,例如给定字符串或文件中的 X.X.X.X(同样,一个或另一个)。我认为这可以通过 Perl 搜索并替换 regexp 来完成 - 这是另一回事。

我测试的 Perl 脚本可以工作,但这只是我需要的一部分,实际上只是为了了解 Regexp::Common (net) 模块是如何工作的。

perl ip
1个回答
0
投票

可以使用替换运算符

s///
执行基于正则表达式的替换。

例如,以下内容会将任何 IP 地址替换为

192.168.10.10

s/$RE{net}{IPv4}/192.168.10.10/

这是

的缩写
s/$RE{net}{IPv4}/ "192.168.10.10" /e

如果您不想替换为静态地址,您可以将替换表达式替换为您想要的任何其他表达式。

$&
包含匹配的地址。例如,您可以做类似的事情

my %mapping = (
   "10.10.10.10" => "192.168.10.10",
   # ...
);

s{
   $RE{ net }{ IPv4 }
}{
   $mapping{ $& } // $&
}xe
© www.soinside.com 2019 - 2024. All rights reserved.