2013-08-05 250 views
1

首先,我想搜索目錄中的特定文件,然後搜索文件中需要搜索的特定單詞。這是我到目前爲止有:查找文件中的特定單詞

$show_bp = 'ShowBuildProcess'; 
$get_bs = 'GetBuildStatus'; 

opendir (DIR, $my_dir) or die $!; 

while(my $file = readdir(DIR)) 
{ 
     if($file=~/\.log/) 
     { 
       if($file=~/GetBuildStatus/) 
       { 

文件名會像GetStatus.<number>.log,例如GetStatus.123456.log。我需要:

  • 在目錄中查找所有.log文件
  • 搜索與文件名的文件開始GetStatus
  • 搜索文件名以較低的數字部分
  • 搜索一個特定的詞文件
+0

文件名會像「GetStatus.123456.log」和「GetStatus.3456781.log」我需要先找到目錄中的所有.log文件,然後搜索對於文件名以GetStatus開頭的文件,然後搜索文件名較小的文件名爲123456或3456781,然後搜索該文件中的特定單詞。 – ramki067

+1

@ ramki067你是什麼意思「具有較低的價值是123456或3456781」。請給出一個日誌文件的簡單例子,你想從中得到什麼? – user4035

+0

@ user4035你沒錯。我只看到'opendir'和'die' ... – ostapische

回答

0

這是給你一個可能的解決方案: 首先我們看一下文件模式,並提取$1,這是第一次正則表達式匹配)括號內)。如果文件符合我們打開它,並通過它看起來一行一行地尋找一個匹配您的/YourSearchPattern/

#!/usr/bin/perl 

use warnings; 
use strict; 

my $mydir = './test/'; 

opendir (DIR, $mydir) or die $!; 

while(my $file = readdir(DIR)){ 
    if ($file =~ /^GetStatus\.(\d+)\.log$/){ 

     if ($1 >= 123456 || $1 < 345678){ 
      open(my $fh,'<', $mydir . $file) or die "Cannot open file $file: $!\n"; 
      while (<$fh>){ 
      if ($_ =~ /YourSearchPattern/){ 
       print $_; 
      } 
      } 
      close($fh); 
     } 
    } 
} 

當你從你的目錄中的文件的最小的序列號,你可以簡單地將它們存儲在一個數組,然後這些數字後,對它們進行排序:

... 
opendir (DIR, $mydir) or die $!; 

my @files; 

while(my $file = readdir(DIR)){ 
    if ($file =~ /^GetStatus\.(\d+)\.log$/){ 
     push @files $file; 
    } 
} 

my @sortedfiles = sort { my ($anum,$bnum); $a =~ /^GetStatus\.(\d+)\.log$/; $anum = $1; $b =~ /^GetStatus\.(\d+)\.log$/; $bnum = $1; $anum <=> $bnum } @files; 

print $sortedfiles[0] . " has the smallest sequence number!\n"; 
+0

嗨,感謝解決方案,這幾乎是我需要的。但是,我提到的文件名只是一個例子。實際的文件名將有不同的序號。因此,我想找到具有較小序號的文件。例如:2個名稱分別爲「GetStatus.123456.log」和「GetStatus.123459.log」的文件 – ramki067

+0

您的意思是您想要查找目錄中所有連續數字中最小的數字? – marderh

+0

@ ramki067在滿意的時候隨時關閉問題/ upvote。 – marderh

相關問題