新手变量问题请帮忙。


@lines = map { (split(/\s+/, $_))[4] } `netstat -an | grep :`;

@results = grep( !/^(0|:)/, @lines );

print "$_\n" for @results;


QUOTE:
原帖由 lylzgq 于 2007-12-11 19:07 发表
#!/usr/bin/perl
$LINE=`netstat -an|grep :`;
for ($LINE) {
my @fields =  (split/\s+/,$_)[4] . "\n";
   print "@fields";
};
###################
netstat -an|grep :  的结果如下
tcp        0   ...

#!/usr/bin/perl
@LINE=`netstat -an|grep :`;
for (@LINE) {
my $field =  (split/\s+/,$_)[4] . "\n";
   print "$field";
};

把你的代码中 @和 $互换一下就可以.
命令: netstat -an | ./netstat3.pl

netstat3.pl内容:
#!/usr/bin/perl

while (<STDIN> ) {
  if (/(^tcp|^udp)/) {
        @fileds = split ;
        print @fileds[4] . "\n" ;
  }
}


QUOTE:
原帖由 Nosferatu 于 2007-12-11 20:42 发表

@lines = map { (split(/\s+/, $_))[4] } `netstat -an | grep :`;

@results = grep( !/^(0|/, @lines );

print "$_\n" for @results;

多谢!
不过执行结果是,没有得出真正的IP.而且端口号也没去掉.
172.16.127.28:1356
172.16.127.35:2240
172.16.127.36:1371
netstat -an 结果的第5列是.
172.16.127.28:1356
172.16.127.35:2240
172.16.127.36:1371
:::*
:::*
::ffff:116.21.66.12:64227
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
所以上面的:ffff:116.21.66.12:64227里面的IP也给丢掉了.
我想取的是
172.16.127.28
172.16.127.35
172.16.127.36
116.21.66.12
所有的IP取出来.
如何用:*来匹配呢.


QUOTE:
原帖由 老手 于 2007-12-11 21:11 发表
命令: netstat -an | ./netstat3.pl

netstat3.pl内容:
#!/usr/bin/perl

while ( ) {
  if (/(^tcp|^udp)/) {
        @fileds = split ;
        print @fileds[4] . "\n" ;
  }
}

多谢.
不过只是取了第五列,没有把IP筛选出来.
都搞到15楼来了......

对你上面的第5列进行
my @ip = map { /(\d+\.\d+\.\d+\.\d+)/ } @result;
      1 #!/usr/bin/perl

      2
      3 while (<STDIN>) {
      4   if (/(^tcp|^udp)/) {
      5         @fileds = split ;
      6         @ips= split /:/, @fileds[4];
      7         $ip = shift @ips ;
      8         print $ip . "\n" ;
      9   }
     10 }
     11


      1 #!/usr/bin/perl

      2
      3 while (<STDIN>) {
      4   if (/(^tcp|^udp)\s+\d+\s+\d+\s+\S+\s+(.*):.*/) {
      5         print $2 . "\n" ;
      6   }
      7 }
      8


      1 #!/usr/bin/perl

      2
      3 while (<STDIN>) {
      4   if (/(^tcp|^udp).*\s+(.*):.*$/) {
      5         print $2 . "\n" ;
      6   }
      7 }
      8


      1 #!/usr/bin/perl

      2
      3 while (<STDIN>) {
      4   if (/.*\s+(.*):.*$/) {
      5         print $1 . "\n" ;
      6   }
      7 }
      8


上面的任意一个都可以: netstat -an | ./netstat.pl , 得到ip.
这样写可以

use strict;

my @line=`netstat -an|grep ':'`;
for(@line){
      my fileds=(split(/ +/,$_)[4];
      if($fileds=~ m/^[1-9]/){
               my $ip=(split(/:/,$fileds))[0];
               print "$ip\n";
       }
}