我有一条很长的线,在这里我想找到所有的链接,当它们后面跟着class="filelink"
链接可以是这样的
<a href="https://example.com/@api/files/123/=2008.pdf" class="filelink"这样的问题是如何写成Perl一行的呢?
更新
如果我做了
echo '<a href="https://example.com/@api/files/123/=2008.pdf" class="filelink"' > test
perl -pe 's/href="(.*)" class="filelink"/\1/g' test然后我得到
<a https://example.com/@api/files/123/=2008.pdf在我预料的地方
https://example.com/@api/files/123/=2008.pdf发布于 2012-01-09 15:32:31
perl -nE'say for m/<a\s+href="([^"]+)"\s+class="filelink"[^>]*>/g;'发布于 2012-01-09 15:13:50
使用健壮的HTML解析器而不是regex的解决方案:
<input_long_line.html perl -MWeb::Query=wq -ne '
wq($_)
->find("a.filelink")
->each(sub {
printf "URL %s\t text %s\n", $_[1]->attr("href"), $_[1]->text
})'为了便于阅读,我把它包装起来,它就像一条衬里一样好用。
发布于 2012-01-09 23:06:31
使用HTML::TreeBuilder::XPath的另一种方法,我觉得很不错:
M=HTML::TreeBuilder::XPath; \
perl -M$M -le 'print $_->attr("href") for ' \
-e "$M->new_from_content(<STDIN>)->" \
-e 'findnodes(q(//a[@class="filelink"]))' < input-filehttps://stackoverflow.com/questions/8790004
复制相似问题