我有一个大约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实例的每个文件移动到其相应的目录。
我真的很感激帮助!
答案 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标记。