0

如何递归到多个目录(在 Windows 中)并搜索从特定名称开始的所有字符串。(例如:所有从“perl_”开始的字符串)并将整行复制到一个新文件中。

感谢您的任何指示(现有网站?)

4

2 回答 2

1

我会从核心 Perl 发行版中的File::Find开始:

use strict;
use warnings;
use File::Find;

my $starting_path = '/path/to/begin/searching';

open my $output, '>', 'output.txt' or die $!;

find(
    sub {
        return unless -e -f;
        if ( open my $infile, '<', $_ ) {
            while ( my $line = <$infile> ) {
                print $output $line if $line =~ m/^perl_/;
            }
        }
        else {
            warn "$_ couldn't be opened: $!";
        }
    },
    $starting_path
);

close $output or die $!;

如果您在设计搜索模式方面需要更多帮助,请参阅Perl 的 POD(Perl 的文档)中的perlretutperlre,它包含在每个发行版中。

于 2012-06-06T06:17:21.597 回答
-1

对于字符串匹配,如果 Perl 使用和 ruby​​ 一样的正则表达式,我相信是这样,那么你可以使用http://rubular.com/来测试正则表达式。要匹配 Perl 中的正则表达式,请执行此操作

if $string =~ /regular expression/

下面的正则表达式应该匹配 perl_ 在字符串的开头

/^perl_/

为了帮助自己,只需谷歌“regular expressions Perl”或“regex Perl”,您会发现一些有用的网站解释如何在 Perl 中使用正则表达式。

要遍历多个目录,请参阅使用 Perl 自动化系统管理中的第 2 章:文件系统。

我希望这能回答你所有的问题。

于 2012-06-06T06:20:45.157 回答