这是一个可能的解决方案:首先我们查看文件模式并提取$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";