【问题标题】:perl remove data from array with field separatorperl 使用字段分隔符从数组中删除数据
【发布时间】:2015-06-01 21:08:45
【问题描述】:

我有以下 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

我想删除包括“:”在内的所有端口号,只想保留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

如果有人可以指导我,或者告诉我如何做到这一点,我将不胜感激?

提前致谢。

【问题讨论】:

    标签: arrays perl variables


    【解决方案1】:

    如果这样修改第二个

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

    【讨论】:

    • 你是明星,谢谢。它工作得很好。
    【解决方案2】:

    在打印 $1 之前,将其存储在一个变量中,删除端口详细信息,然后打印它:

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

    【讨论】:

    • 不,它不起作用,我收到以下错误。在 ./block_asterisk.pl 第 21 行, 第 159410 行 的打印中使用未初始化的值 $1
    • @user2107349:打印 $ip,而不是 $1。
    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2013-07-14
    • 2011-08-29
    相关资源
    最近更新 更多