wget逃脱特殊人物

时间:2016-06-23 11:03:43

标签: bash wget

我正在尝试使用wget:

下载此网页的内容
https://bibliotheque-numerique.paris.fr/search.aspx?SC=DEFAULT#/Search/(query:(ForceSearch:!f,Page:0,PageRange:3,QueryString:'*:*',ResultSize:50,ScenarioCode:DEFAULT,ScenarioDisplayMode:display-standard,SearchLabel:'',SearchTerms:'',SortField:DateOfInsertion_sort,SortOrder:0,TemplateParams:(Scenario:'',Scope:VPCO,Size:!n,Source:'',Support:'')))

由于特殊字符,它无效。我试图用“\”来逃避它们,但它对我不起作用。

2 个答案:

答案 0 :(得分:1)

由于搜索查询仅使用单引号,因此您可以使用双引号来保护它们不受shell影响。此外,在zsh(以及可能的其他交互式shell)中,您需要使用反斜杠转义!字符,因为!甚至在双引号内也有意义。结果如下:

# use double quotes and escape "!"
wget "https://bibliotheque-numerique.paris.fr/search.aspx?SC=DEFAULT#/Search/(query:(ForceSearch:\!f,Page:0,PageRange:3,QueryString:':',ResultSize:50,ScenarioCode:DEFAULT,ScenarioDisplayMode:display-standard,SearchLabel:'',SearchTerms:'',SortField:DateOfInsertion_sort,SortOrder:0,TemplateParams:(Scenario:'',Scope:VPCO,Size:\!n,Source:'',Support:'')))"

为了避免此类问题,您可以使用wget -i指定一个输入文件,其中URL将逐行读取而不解释特殊字符(除了换行符分隔行)。与<<运算符结合使用时,它允许指定URL而无需特殊引号:

# use -i - to read from stdin, and the <<\ operator to feed
# the URL to Wget without having to quote it
wget -i - <<\.
https://bibliotheque-numerique.paris.fr/search.aspx?SC=DEFAULT#/Search/(query:(ForceSearch:!f,Page:0,PageRange:3,QueryString:':',ResultSize:50,ScenarioCode:DEFAULT,ScenarioDisplayMode:display-standard,SearchLabel:'',SearchTerms:'',SortField:DateOfInsertion_sort,SortOrder:0,TemplateParams:(Scenario:'',Scope:VPCO,Size:!n,Source:'',Support:'')))
.

答案 1 :(得分:0)

您可以按如下所示在命令行变量中声明URL。

testUrl='http://www.example.com/1111?&nr=0.15859029847072859&edge=y&html5=y'

,然后按如下所示使用它:

wget $testUrl