在文件中查找特定单词

时间:2013-08-05 09:17:26

标签: perl file search

首先,我想在目录中搜索特定文件,然后在文件中搜索特定单词。这是我到目前为止所做的:

$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
  • 开头的文件
  • 使用较低的数字部分
  • 搜索文件名
  • 搜索该文件中的特定字词

1 个答案:

答案 0 :(得分: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";