[英]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.