2017-06-03 56 views
-1
open(LOGFILE,"<sim_success.log") or die("could not open file"); 
while (<LOGFILE>){ 
$line = $_; 
chomp($line); 
my @design = grep (/Design:/, $line); 
push (@final, @design); 
} 
print $final[0]; 

close LOGFILE; 

設計:d:\測試\例子\ Example1_wrk ....如何從perl中的字符串捕獲具有特定模式的子字符串/單詞?

如何保存 「Example_wrk」 在Perl中的變種?

+0

如果我們打印$決賽[1]>唯一的變化是它變得... Example2_wrk,需要保存在VAR – Harsh

+0

所以,你必須保存所有線路匹配「設計:」在陣列中的'@ final'。這是一個變量。任務完成?這個問題似乎並不能捕捉到你實際想要做的事情。 – bytepusher

+0

所以你想要走出這條路線? – simbabque

回答

0

這是胡亂猜測。我想你想要的是從該行日誌文件中捕獲文件名。

use strict; 
use warnings; 

my @final; 
open my $fh, '<', 'sim_success.log' or die "could not open file: $!"; 
while (my $line = <$fh>) { 
    chomp $line; 
    if ($line =~ m/Design: (.+)$/) { 
     push @final, $1; 
    } 
} 
print $final[0]; # will print only the first one 
close $fh; 

讓我們來看看我做了什麼。 Melpomene對這個問題的評論已經解釋了很多。我會重申其中的一些。

  • 總是use strictuse warnings!他們幫助你發現錯誤。
  • grep不會做你的想法。它用於查找與條件匹配的列表中的事物。您的列表只有一個項目。該線。
  • 您可以直接使用m//操作。
  • ,但你需要一個捕獲組(),捕捉一切
  • 和拍攝的東西,會在$1,我們可以push到陣列

當程序完成後,該陣列@final可能包含一個或多個匹配。如果多行匹配,則數組中的條目更多。

相關問題