繁体   English   中英

在文件中查找特定单词

[英]Find a specific word in a file

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

$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 ,这是括号中的第一个正则表达式匹配项)。 如果文件适合,我们将其打开并逐行浏览,然后查找与您的/YourSearchPattern/匹配的/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";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM