2013-05-12 72 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> 

你去判斷這是否足以爲你的目的。至少它給你一些工作。