這是給你一個可能的解決方案: 首先我們看一下文件模式,並提取$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";
文件名會像「GetStatus.123456.log」和「GetStatus.3456781.log」我需要先找到目錄中的所有.log文件,然後搜索對於文件名以GetStatus開頭的文件,然後搜索文件名較小的文件名爲123456或3456781,然後搜索該文件中的特定單詞。 – ramki067
@ ramki067你是什麼意思「具有較低的價值是123456或3456781」。請給出一個日誌文件的簡單例子,你想從中得到什麼? – user4035
@ user4035你沒錯。我只看到'opendir'和'die' ... – ostapische