在Perl中搜索,创建和移动

时间:2012-04-25 17:13:30

标签: regex perl html-parsing

我有一个大约800个html文件的目录。我试图搜索每个文件并在标签之间返回文本。然后我想创建一个包含该文本的目录,并在那里移动(或复制)文件。当我想到这一点时,这似乎是一件相当容易的事,但即使找到了我需要的模块,我也遇到了很多问题。我看过File :: Find和glob,但我不确定如何用文件中的txt的正则表达式实现这个(不是文件名)。我基本上是perl的新手所以任何和所有帮助都会不胜感激。提前致谢。

EDIT 澄清:我想要完成的任务:

阅读目录=〜/ me / project /

对于〜/ me / project /找到所有文件=〜/ .$$/i

对于每个文件,搜索html for = div class =“recip”id =“objectTo”>(。*)/ div

对于每个(。*)IE john@doewww.com或John Doe创建一个具有相同名称的目录

循环返回并将具有xxxxxxxx@xxxxx.com或John Doe实例的每个文件移动到其相应的目录。

我真的很感激帮助!

2 个答案:

答案 0 :(得分:2)

你使用File :: Find走在正确的轨道上。

您将创建一个'wanted()'函数,在该函数中,找到的文件名称为$File::Find::name。然后,您可以使用它来打开文件句柄,读入文件,搜索标记并提取您要查找的数据,然后关闭文件句柄。然后File :: Find将转到下一个文件。

#! /usr/bin/perl

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

sub wanted {
    my $file=$File::Find::name;

    # if the file has the extension '.html' (case insensitive) ...
    if( $file =~ /\.html$/i ) {
        my $FH;
        open( $FH, '<', $file) or die "Could not open '$file' for reading: $!";
        local $/ = '';
        my $contents = <$FH>; # slurp file into $contents
        # search $contents for the tags that you're looking for,
        # 
        close $FH;
    }
}

my @directories = (
      './htmlfiles'
    , './www'
    , './web'
);

find(\&wanted,  @directories);

警告:代码通过了perl -c,但我还没有运行它。

答案 1 :(得分:0)

对于问题的第二部分,请查看HTML::Strip以从文本中删除HTML标记。