1

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

编辑澄清:我想要完成的事情:

读取目录 = ~/me/project/

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

对于每个文件,在 html 中搜索 = div class="recip" id="objectTo">(.*) /div

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

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

我真的很感激帮助!

4

2 回答 2

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了,但我没有运行它。

于 2012-04-25T17:20:23.450 回答
0

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

于 2012-04-25T19:19:09.327 回答