新手变量问题请帮忙。

新手变量问题请帮忙。

#!/usr/bin/perl
$LINE=`netstat -an|grep :`;
for ($LINE) {
my @fields =  (split/\s+/,$_)[4] . "\n";
   print "@fields";
};
###################
netstat -an|grep :  的结果如下
tcp        0      0   172.16.127.8:445            172.16.127.76:4991          ESTA
tcp        0      0   172.16.127.8:445            172.16.127.181:1473         ESTA
tcp        0      0   172.16.127.8:445            172.16.127.182:4554         ESTA
tcp        0      2   172.16.127.8:23             172.16.127.28:2790          ESTA
tcp        0      0   172.16.127.8:445            172.16.127.239:1570         ESTA
udp        0      0   0.0.0.0:10000               0.0.0.0:*
udp        0      0   0.0.0.0:161                 0.0.0.0:*
udp        0      0   0.0.0.0:162                 0.0.0.0:*
udp        0      0   0.0.0.0:49199               0.0.0.0:*
我想取第五列
为什么结果只有第一行的
172.16.127.76:4991  
而不是一整列。
另外为什么
$LINE=`netstat -an|grep grep ":\*"`;
print $LINE;
是空的?
*号我已经做了转义了为什么不行呢。
或考还有什么更好的办法取到第五列的IP。
@LINE=`netstat -an | awk '/:/{print $5}'`;
for (@LINE) {
        print;
};

我又了一下用@LINE  就可以。为什么数组就可以。变量不行。
回答真及时,呵呵。谢谢二楼。


QUOTE:
原帖由 ly5066113 于 2007-12-11 19:14 发表
@LINE=`netstat -an | awk '/:/{print $5}'`;
for (@LINE) {
        print shift @LINE;
};

这个好像实现不了取第五列,perl 中好像不能用awk


QUOTE:
原帖由 lylzgq 于 2007-12-11 19:21 发表

这个好像实现不了取第五列,perl 中好像不能用awk

grep不也是外部工具么?awk为什么就不可以用呢?


QUOTE:
原帖由 ly5066113 于 2007-12-11 19:14 发表
for (@LINE) {
        print shift @LINE;
};

这段代码是错误的,除非你真的愿意只输出一半的信息。
正确的应该是:

[Copy to clipboard] [ - ]
CODE:
for (@LINE){
    print;
}



QUOTE:
原帖由 flw 于 2007-12-11 19:24 发表

这段代码是错误的,除非你真的愿意只输出一半的信息。
正确的应该是:
for (@LINE){
    print;
}

Sorry,因为在文档中看过这么一段;
while (@files) {
      my $file = shift @files;
      unlink $file or warn "Can't delete $file: $!\n";
}

误以为数组的循环需要那样写。


QUOTE:
原帖由 ly5066113 于 2007-12-11 19:28 发表

Sorry,因为在文档中看过这么一段;
while (@files) {
      my $file = shift @files;
      unlink $file or warn "Can't delete $file: $!\n";
}

误以为数组的循环需要那样写。

for 和 while 不一样。
文档里是 while,你写的是 for。

[Copy to clipboard] [ - ]
CODE:
for $item (@arr){
    .......
}

等效于

[Copy to clipboard] [ - ]
CODE:
while(@arr){
    $item = shift @arr;
    .......
}



[Copy to clipboard] [ - ]
CODE:
for (@arr)

等效于

[Copy to clipboard] [ - ]
CODE:
for $_ (@arr)

@LINE=`netstat -an | awk '/:/{print $5}'`;
for (@LINE){
    print;
}
这个输出的结果就是
netstat -an的结果,并没有取到第5列
#########################
#!/usr/bin/perl
@LINE=`netstat -an|grep :`;
for (@LINE) {
@fields =  (split/\s+/,$_)[4] . "\n";
  
  print "@fields";
};

执行的结果为.
::ffff:220.181.19.170:61227
::ffff:221.7.48.251:50410
::ffff:
:50409
::ffff:220.207.167.224:1125
::ffff:220.207.167.224:1123
::ffff:116.27.216.7:11739
::ffff:218.84.81.2:50552
::ffff:72.30.215.88:45042
::ffff:220.181.19.170:1956
::ffff:220.181.19.170:3507
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
0.0.0.0:*
222.223.181.145:5388
0.0.0.0:*
0.0.0.0:*
211.155.23.81:25
:::*
:::*
如何取出上面的IP
220.181.19.170
221.7.48.251
220.207.167.224
220.207.167.224
116.27.216.7
218.84.81.2
72.30.215.88
220.181.19.170
220.181.19.170
222.223.181.145
211.155.23.81
其它的全部删节掉,并保存到一个@result中.