我想递归下载该页面https://en.wikipedia.org/wiki/Main_Page,但仅限来自 upload.wikimedia.org 和 de.wikipedia.org 的文件
它通过使用以下命令来工作:
wget -H -r -l1 --accept-regex upload.wikimedia.org https://en.wikipedia.org/wiki/Main_Page
wget -H -r -l1 --accept-regex de.wikipedia.org https://en.wikipedia.org/wiki/Main_Page
我的问题是:是否可以在单个命令中合并两个域?像这样:
wget -H -r -l1 --accept-regex de.wikipedia.org||upload.wikimedia.org https://en.wikipedia.org/wiki/Main_Page
其中“||”表示“或”
答案1
通常--accept-regex
使用 POSIX扩展正则表达式语法,其中单身的 |
用于替代分支。(如果您告诉 wget 使用 PCRE 语法(POSIX ERE 的超集),同样适用。)
请注意 POSIX扩展正则表达式语法(由egrep
或使用sed -E
)与 POSIX 不同基本的正则表达式语法(由grep
或使用sed
)。例如,BRE 使用\|
替代分支 和|
文字管道符号,但 ERE 则完全相反。括号和许多其他特殊字符也是如此,在 BRE 中必须以反斜杠为前缀,但在 ERE 中则不需要。
在任何情况下,正则表达式看起来都会像这样:
de.wikipedia.org|upload.wikimedia.org
(de|upload).wikimedia.org
更正确(点在正则表达式语法中也很特殊):
de\.wikipedia\.org|upload\.wikimedia\.org
(de|upload)\.wikimedia\.org
请注意,该|
字符在大多数交互式 shell 中都是特殊的(它是管道运算符),因此任何包含它的参数都需要用引号引起来:
wget --accept-regex "(de|upload).wikimedia.org"