2013-05-12 34 views
0

我有一个使用wget检索到的html文件。我想将所有链接,即全部<a href=""> </a>放在文件的末尾。可能吗?将特定文本放在unix文件末尾

例如,请考虑以下文件:

<tr style="background-color: #EFEFEF"> 
    <td valign="top">Line1<br />2013.05.23</td> 
    <td>Line2 
    <br /><a href="link.html">link</a> 
    <br />Line3 
    </td> 
</tr> 

我想文字变成这样:

<tr style="background-color: #EFEFEF"> 
    <td valign="top">Line1<br />2013.05.23</td> 
    <td>Line2 
    <br /> 
    <br />Line3 
    </td> 
</tr> 
<a href="link.html">link</a> 
+0

你有没有尝试过任何具体的东西? – 2013-05-12 19:40:51

+0

我不知道如何。 – abby 2013-05-12 19:42:34

+0

正确的方法可能涉及XSLT ... – 2013-05-12 19:47:49

回答

2

如果你只是想副本(而不是移动)链接到文件的末尾,你可以做一个简单grep(也许不适合,当然特殊情况下工作):

grep -o -P '(<a href=.*?</a>)' test.html > tmp.html && cat tmp.html >> test.html 
2

对于示例数据简单的锚标记,这个Perl脚本足以:

#!/usr/bin/env perl 
use strict; 
use warnings; 

my @urls =(); 

while (<>) 
{ 
    chomp; 
    if (m/\s*(<a\s+[^>]+>.*<\/a>)\s*/) 
    { 
     push @urls, $1; 
     s///; 
    } 
    print "$_\n"; 
} 

foreach my $url (@urls) 
{ 
    print "$url\n"; 
} 

输出示例:

<tr style="background-color: #EFEFEF"> 
    <td valign="top">Line1<br />2013.05.23</td> 
    <td>Line2 
    <br /> 
    <br />Line3 
    </td> 
</tr> 
<a href="link.html">link</a> 

需要注意的是,如果有在输入一行几个锚标记,这将包括在脚本底部的外标签之间的物质,太。如果锚标签横跨线路断开,它将被忽略。我毫不怀疑,有HTML符号可以打破这个脚本(但我不知道它们是什么)。

这是从简单的脚本,一个小的一步:

#!/usr/bin/env perl 
use strict; 
use warnings; 

my @urls =(); 

while (<>) 
{ 
    chomp; 
    while (m/\s*(<a\s+[^>]+>.*?<\/a>)\s*/) 
    { 
     push @urls, $1; 
     s// /; 
    } 
    print "$_\n"; 
} 

foreach my $url (@urls) 
{ 
    print "$url\n"; 
} 

while环代替if迭代过比赛在一条线上。非贪婪.*?量词意味着它不会吞噬中间锚点标记。该替代品用空白替换被删除的材料,从而保持将锚标签分开的单词。

示例数据:

<tr style="background-color: #EFEFEF"> 
    <td valign="top">Line1<br />2013.05.23</td> 
    <td>Line2 
    <br /><a href="link.html">link</a> 
    <br />Line3 
    </td> 
</tr> 
<tr style="background-color: #EFEFEF"> 
    <td valign="top">Line1<br />2013.05.23</td> 
    <td>Line2 
    <br /> <a href="link2.html">link</a> extraneous material <a href="link3.html">link</a> other notes <a href="link4.html">link</a> 
    <br />Line3 
    </td> 
</tr> 

输出示例:

<tr style="background-color: #EFEFEF"> 
    <td valign="top">Line1<br />2013.05.23</td> 
    <td>Line2 
    <br /> 
    <br />Line3 
    </td> 
</tr> 
<tr style="background-color: #EFEFEF"> 
    <td valign="top">Line1<br />2013.05.23</td> 
    <td>Line2 
    <br /> extraneous material other notes 
    <br />Line3 
    </td> 
</tr> 
<a href="link.html">link</a> 
<a href="link2.html">link</a> 
<a href="link3.html">link</a> 
<a href="link4.html">link</a> 

你去判断这是否足以为你的目的。至少它给你一些工作。