输入文件:如何在匹配perl文本后提取所需的行?
{test test
{***********************************************************************
{Rtest
{***********************************************************************
{test
{***********************************************************************
{* date
{*
{* Initial revision
{*
{***********************************************************************
{output}
{output1}
{output 2}
{Test TEst TEST}
{Test test test}
{*********************}
{********************}
所需的输出:
{Output}
{output1}
{output2}
脚本
use strict;
use warnings;
while (<DATA>) {
$line = $_;
chomp $line;
push(@lines, $line);
$line =~ s/^\s+//;
$line =~ s/\s+$//;
for (my $i = 0 ; $i <= $#lines ; $i++) {
if ($lines[$i] =~ m/(^{\**$)/) {
push(@matched, $lines[ $i + 1 ]);
print "$lines[$i+1]"."\n";
}
}
}
我的输出:
{test test
{***********************************************************************
{Rtest
{***********************************************************************
{test
{***********************************************************************
{* date
{*
{* Initial revision
{*
{***********************************************************************
我能够顶块匹配,但无法获得所需的前3行作为输出。从上面的匹配条件我试图提取下一行,但我得到一个空白的输出。 我错过了什么,在此先感谢。
你的代码不能和'use strict'一起使用。有很多'需要显式包名'错误。另外,你已经重新定义了'$ line'。 – simbabque 2012-07-17 07:25:45
如果你写下你的'输出'行匹配的特定条件,这将非常有帮助。现在,正如我所看到的,它可以是'/^\ {[^ {] *} $ /'pattern'匹配的文件中的前三行,或者是与其他行由空字符串组成,不包含'*'符号。它不应该是这样的:我们不需要讨论你想要的东西。 – raina77ow 2012-07-17 09:03:59
我同意@ raina77ow – quinekxi 2012-07-17 09:17:32