在Perl中搜索文件名中具有特定正则表达式的文件

时间:2011-11-18 18:21:07

标签: regex perl file search

大家好,我想知道如何在perl中搜索文件。

现在我有一行信息,我用tab标记为存储在数组中的分隔符。 (使用拆分)这些数组包含我想在目录中搜索的文件名的存根文本。例如,Engineering_4.txt就是我的数组中的“Engin”。

如果有两个不同的文件...... Engineering_4和Engineering_5,它会在这两个文件中搜索内容,只从其中一个中提取我需要的信息(只有1个包含我想要的信息)。我想我的脚本必须搜索和存储匹配的所有文件名,然后搜索每个文件。

我的问题是如何在与Perl中的正则表达式匹配的目录中搜索文件?还有一种方法可以限制我要搜索的文件类型。例如,我只想搜索“.txt”文件。

谢谢大家

4 个答案:

答案 0 :(得分:4)

我猜你已经知道了这个目录,你可以打开它并阅读它同时过滤它:

opendir D, 'yourDirectory' or die "Could not open dir: $!\n";
my @filelist = grep(/yourRegex/i, readdir D);

答案 1 :(得分:0)

您可以使用<glob>运算符的glob函数执行此操作。

while (<Engin*.txt>) {
 print "$_\n";
}

答案 2 :(得分:0)

glob函数在提供通配符表达式时返回匹配文件的数组。

这意味着在处理之前文件也可以是sort

use Sort::Key::Natural 'natsort';

foreach my $file ( natsort glob "*.txt" ) {  # Will loop over only txt files

    open my $fh, '<', $file or die $!; # Open file and process
}

答案 3 :(得分:0)

您还可以使用File :: Find模块:

#!/usr/bin/env perl
use strict;
use warnings;
use File::Find;
my @dirs = @ARGV ? @ARGV : ('.');
my @list;
find( sub{
    push @list, $File::Find::name if -f $_ && $_ =~ m/.+\.txt/ },
    @dirs );
print "$_\n" for @list;