![如何通过匹配模式读取目录中的多个文件?](https://linux22.com/image/990763/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E5%8C%B9%E9%85%8D%E6%A8%A1%E5%BC%8F%E8%AF%BB%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个包含“x”个文件的目录。一些文件包含“Pass”字符串,另一些文件包含“Fail”。我想读取这两个文件,并将通过和失败的文件分别存储在两个不同的目录中。我可以读取文件,但无法匹配字符串。
#!/usr/bin/perl
use strict;
use warnings;
use Path::Class;
my $src = dir("/home/Narayanan/Cov_script/logs/");
my $pattern = "TEST IS PASSED";
my $i = 0;
my @log_files = grep /[.] log\z/x, $src->children;
for my $log_file ( @log_files ) {
my $in = $log_file->openr;
while (my $line = <$in>) {
my $string = $line;
#| `grep { $line eq $pattern } `
print "OUT: $string";
}
}
答案1
有一个 =~ 运算符用于将字符串与模式匹配。这对我来说似乎有用(我认为应该是foreach而不是,但是为了和foreach是同义词,因此您可以使用其中任一方式):
foreach my $log_file ( @log_files ) {
my $in = $log_file->openr;
while (my $line = <$in>) {
my $string = $line;
if ($line =~ /$pattern/)
{
#| `grep { $line eq $pattern } `
print "OUT: $string";
}
}
}