从导出的书签文件中提取数据

时间:2014-09-01 23:19:44

标签: perl extract

我有大量的书签,我希望能够提取与学校相关的书签并将其存储在一个文件中。我已经能够提取网址,但我也想提取标题。

以下是数据如何东方存储在导出的书签文件中。

<DT><A HREF="https://google.com">Google</A>

我用它来获取网址

perl -0ne 'print "$1\n" while (/a href=\"(.*?)\">.*?<\/a>/igs)' test.txt.bak |grep 'http://' > bak2

它给了我

http://google.com

我想提取标题并有一个像这样的文件

google
http://google.com

我将不胜感激。

2 个答案:

答案 0 :(得分:3)

如前所述,您应该使用一个解析HTML而不是依赖于正则表达式的模块。

使用HTML::Tree

查看下面的示例
#!/usr/bin/perl
use strict;
use warnings;
use autodie;

use HTML::Tree;

die "USAGE: <program> <path/to/file> <query>\n" unless @ARGV == 2;

my ( $bmFile, $search ) = @ARGV;

my $tree  = HTML::TreeBuilder->new_from_file($bmFile);
my @elems = $tree->look_down(
    _tag => 'a',
    sub {
        $_[0]->as_text() =~ /$search/i;
    }
);

printf "%s\n%s\n\n", $_->as_text(), $_->attr('href') for @elems;

答案 1 :(得分:1)

您可以添加另一个组,然后先将其打印出来。这会给你标题,然后添加\ n中断并将第一项放在第二行。如:

perl -0ne 'print "$2\n$1\n" while (m{a href="(.*?)">(.*?)</a>}igs)' test.txt.bak |grep 'http://' > bak2