perl使用字段分隔符从数组中删除数据

时间:2015-03-28 16:04:56

标签: arrays perl variables

我有以下perl脚本。

#!/usr/bin/perl -w
use strict;
use warnings;
my (@failhost);
my %currblocked;
my %addblocked;
my $action;

open (MYINPUTFILE, "/var/log/asterisk/messages") or die "\n", $!, "Does log file file exist\?\n\n";

while (<MYINPUTFILE>) {
    my ($line) = $_;
    chomp($line);
    if ($line =~ m/\' failed for \'(.*?)\' - No matching peer found/) {
        push(@failhost,$1);
    }
    if ($line =~ m/\' failed for \'(.*?)\' . Wrong password/) {
        push(@failhost,$1);
        print $1 . "\n";
    }
}
exit 0;

这会产生以下结果。

212.83.134.244:5065
212.83.134.244:5063
212.83.134.244:5092
212.83.134.244:5109
212.83.134.244:5080
212.83.134.244:5110
212.83.134.244:5096
212.83.134.244:5093
212.83.134.244:5089
212.83.134.244:5073
212.83.134.244:5101
212.83.134.244:5072
212.83.134.244:5092
212.83.134.244:5094
212.83.134.244:5076
212.83.134.244:5080
212.83.134.244:5081
212.83.134.244:5094
212.83.134.244:5077
212.83.134.244:5096
212.83.134.244:5069
212.83.134.244:5097
212.83.134.244:5101

我想删除所有端口号码,包括&#34;:&#34;,只想保留IP地址。

期望的结果将是这样的

212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244
212.83.134.244

如果有人可以指导我,或者告诉我该怎么做,我将不胜感激?

提前致谢。

2 个答案:

答案 0 :(得分:0)

在打印$ 1之前,将其存储在变量中,删除端口详细信息并打印出来:

my $ip = $1;
$ip =~ s/:.*//;
print $ip, "\n";

答案 1 :(得分:0)

如果像这样修改第二个

if ($line =~ m/\' failed for \'([^:]*):\d+\' . Wrong password/) {