我需要 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) 模块是如何工作的。
可以使用替换运算符
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