2011-04-09 57 views
0

小注:我从infront的每个链接中删除了http://,因为stackoverflow不允许我以原始方式发布它。 我写了一个脚本,可以访问网页,捕捉URL并下载它。其中一个网址使curl停止工作,并且列表中的整个URL都相同。 该脚本如下: -用Bash卷曲复杂

PAGE=$(curl -sL pageurl) 
FILE_URL=$(echo $PAGE | sed -e 's/^.*<a href=\"\(.*\)\">\(.*\) alt="File" \/><\/a>.*$/\1/') 

的FILE_URL值

URL/files/PartOne - Booke (Coll).pdf 
webprod25.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1&fln=/adobe reader exe.rar 

和SO一为他人

当卷曲试图抓住这个网址就说明使用调试以下错误bash模式

++ curl -sOL 'webprod37.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1&fln=/adobe' reader exe.rar fileshare273.depositfiles.com/auth-13023763920cd7ec18a0fdbfa8b62d35-188.165.197.50-43792102-7713641/FS273-7/PageMaker.rar -sOLJg fileshare601.depositfiles.com/auth-1302376689013d421df6c01e7f64c8d2-188.165.197.50-43801594-82379659/FS601-2/Adobe_Flash_Player_v10.3.180.65.2.rar -sOLJg 'webprod37.megashares.com/index.php?d01=de48789&lccdl=9e8e091ef33dd103&d01go=1&fln=/KAZAMIZA.COM.Adobe.Flash' Player-10.3.180.65.Beta-2.JUDGMENT DAY.rar bellatrix.oron.com/spzsttzwytpflwd76j3ne2moukomuhcdxg6llddfztqa2ztd7cplwwp457h3mxuacq3pbxzs/An-Beat - Mentally Insine '(Original' 'Mix).mp3' 
curl: option -: is unknown 

curl: try 'curl --help' or 'curl --manual' for more information 

引用标记卷曲放i本身,我试图做一些解决方法,如转义网址,但它不起作用。

+0

您是否尝试在引号中编写参数? – StKiller 2011-04-09 20:07:09

回答

0

引用您的变量为:

pageurl='the url' 
PAGE=$(curl -sL "$pageurl") 
FILE_URL=$(echo "$PAGE" | sed -e 's/^.*<a href=\"\(.*\)\">\(.*\) alt="File" \/><\/a>.*$/\1/') 

,否则会造成外壳扩展。错误“选项 - :未知”来自最后一部分:

An-Beat - Mentally Insine 

因为你没有申请报价给它,它得到了解析作为参数,你可以清晰地在强调语法的代码中看到。

1

基本问题似乎是,您使用$()扩展来看起来像多行值的东西。你应该尝试遍历每一行。

另一个问题看起来像是包含空格的URL的不正确引用之一。 “An-Beat - Mentally Insine”中有一个单独的短划线( - )

噢,还有一个问题:只有当线路上只有一个href时,才会捕获href =“...”内容的sed部分。如果有两个或更多,你的\(.*\)将匹配到最后一个href。你应该使用类似href="\([^"]*\)"的东西,匹配“任何数量的非双引号后加双引号”。