Perl - 为什么我的正则表达式不会产生任何结果?

时间:2015-05-13 11:08:52

标签: regex perl

我有一个小程序,它接受用户输入,并且应该从包含指定“端口”的文本文件中过滤掉特定行。文本文件如下所示:

State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port 
LISTEN     0      128                       *:22                       *:*     
LISTEN     0      128               127.0.0.1:631                      *:*     
LISTEN     0      100               127.0.0.1:25                       *:*   

我编写的脚本只是提示用户输入,并且应该使用与输入变量结合的正则表达式过滤掉数据。使用网站 www.rubular.com 我可以让我的表达按预期工作,但在实际代码中我没有得到任何列出的数据。

以下是我的Perl脚本:

use warnings;
use strict;

my $port_query = 1;
my $command = "ss -p -l -n -t -u -4";
my $port = 0;
my $output_file = "system_output.txt";

while ($port_query == 1) {    
    print "Please choose the port number (Numerical value):\n";
    $port = <>;
    if ($port =~ /^[0-9]{1,5}+$/) {
        $port_query = 0;
    }
    else {
        print "Argument not allowed.\n";    
    }     
}

system ("touch $output_file"); #Creates the output file.
system ("$command > $output_file"); #Executing system commands

open(INPUT, "<", "$output_file") or die ("Unable to write to file.");
chomp(my @socket_data = <INPUT>);
close (INPUT);

foreach my $line(@socket_data) {
    if ($line =~ /\S+?([0-9]|0*):($port)/) {
        print "$line\n";
    }
}

脚本应该打印一行,即:

LISTEN     0      128                       *:22                       *:* 

1 个答案:

答案 0 :(得分:2)

您忘记从用户输入中删除换行符。

friends_*