1

使用http://curl.haxx.se/programs/curlmirror.txt [编辑:当前版本在https://github.com/cudeso/tools/blob/master/curlmirror.txt ],我正在寻找下载网站并检查新下载的网站和我之前下载的网站之间的变化。但是,当我下载同一个网站时,有时网站上的链接使用相对路径,有时它们使用绝对路径,即使网站没有更改,这也算作“更改”。

Usage: curlmirror.pl -l -d 3 -o someOutputFileDirectory/url http://url

Output 1: <td><a href="testing.htm">LINK</a></td>
Output 2: <td><a href="http://example.com/testing.htm">LINK</a></td>

有没有办法将所有相对路径转换为绝对路径或相反?我只需要标准化下载,以便这些链接不会显示为“更改”

4

1 回答 1

1

更新

我假设 url 被放置到$url变量中。然后您可以尝试以下方法:

perl -pe 'BEGIN {$url="http://somedomain.org"}
s!(\b(?:url|href)=")([^/]+)(")!$1$url/$2$3!gi' << XXX
<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
XXX

输出:

<td><a href="http://mymain.org/testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="http://mymain.org/home">

它用或如果不包含字符替换所有href="..."url="..."(不区分大小写)模式。href="$url/..."url="$url/...".../

如果输入的是文件,则可以直接替换文件中的这些模式:

cat >tfile << XXX
<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
XXX

cat tfile
perl -i -pe 'BEGIN {$url="http://mymain.org"}
s!(\b(?:url|href)=")([^/]+)(")!$1$url/$2$3!gi' tfile
echo "---"
cat tfile

输出:

<td><a href="testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="home">
---
<td><a href="http://mymain.org/testing.htm">LINK</a></td>
<td><a href="http://mydomain.com/testing.htm">LINK</a></td>
<meta http-equiv="Refresh" content="0;URL="http://mymain.org/home">
于 2013-05-14T10:57:14.847 回答