我有一个小程序,它接受用户输入,并且应该从包含指定“端口”的文本文件中过滤掉特定行。文本文件如下所示:
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 *:*
答案 0 :(得分:2)
您忘记从用户输入中删除换行符。
friends_*