輸入文件:如何在匹配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