我有大量的书签,我希望能够提取与学校相关的书签并将其存储在一个文件中。我已经能够提取网址,但我也想提取标题。
以下是数据如何东方存储在导出的书签文件中。
<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
我将不胜感激。
答案 0 :(得分:3)
如前所述,您应该使用一个解析HTML而不是依赖于正则表达式的模块。
查看下面的示例#!/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