如何打印匹配的行?

如何打印匹配的行?

我有这样的一段文本已经输入到了变量中:$text

[Copy to clipboard] [ - ]
CODE:
TCP  172.16.1.100:www                    0      195        0    10216        0
  -> 172.16.1.102:www                    0        0        0        0        0
  -> 172.16.1.101:www                    0      195        0    10216        0

同时我有一个ip列表。我希望检查ip列表中的ip,是不是都出现在了以上变量中。并且若有某个ip未找到,设定一个变量值为 -1 标记一下。

一开始想用 grep:

[Copy to clipboard] [ - ]
CODE:
my @line = grep {/172.16.1.100/} $text;
print @line;

但是发现打印出来的,依然还是整段文本,而不是其中的一行。

如果让他只出来对应的行呢?


QUOTE:
原帖由 latteye 于 2008-11-24 09:59 发表
我有这样的一段文本已经输入到了变量中:$text

TCP  172.16.1.100:www                    0      195        0    10216        0
  -> 172.16.1.102:www                    0        0        0         ...



[Copy to clipboard] [ - ]
CODE:
my @line = grep {/172.16.1.100/} split /\n/,$text;
print join "\n",@line;

试试?
因为你只有一行 。。。


QUOTE:
原帖由 smonkey0 于 2008-11-24 10:13 发表

my @line = grep {/172.16.1.100/} split /\n/,$text;
print join "\n",@line;
试试?

谢谢 !
成功了。
虽然 join \n 之后出来的格式很乱,不过无所谓了。

我之前不成功,是因为 \n 的存在并没有让文本被认为是多行?
有没有什么办法直接把源文本中 \n 替换成其他字符。让 perl 认为他就是三行呢。
啊!我想我搞定了。
用 split 把原来的文本分割 \n ,输入到新的数组里面,这样数组内的[$] 就是分别的行了。