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
  • 搜索具有较低数字部分的文件名
  • 在该文件中搜索特定单词
4

1 回答 1

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";
于 2013-08-05T10:09:28.807 回答