首先,我想在目录中搜索特定文件,然后在文件中搜索特定单词。这是我到目前为止所做的:
$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 :(得分: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";