【发布时间】:2015-05-13 15:01:59
【问题描述】:
我有一个小脚本想与 cron 一起使用。 目的:获取带有链接的网页,从链接中提取日期并下载文件。 下面的脚本不能 100% 工作,我看不到问题。
#!/bin/bash
for i in $(curl http://107.155.72.213/anarirecap.php 2>&1 | grep -o -E 'href="([^"#]+)"' | cut -d'"' -f2 | grep '_whole_1_3000.mp4'); do
GAMEDAY=$(echo "$i" | grep -Eo '[[:digit:]]{4}/[[:digit:]]{2}/[[:digit:]]{2}')
wget "$i" --output-document="$GAMEDAY.mp4"
done
它是网页“curl http://...etc” - 工作
$DAY - 提取日期 - 有效。
当我添加 $DAY 时,wget 部分不起作用。我瞎了……我错过了什么。
【问题讨论】:
-
set -x说发生了什么? -
在不同的点上,mywiki.wooledge.org/DontReadLinesWithFor。就我个人而言,我会以完全不同的方式编写这段代码,使用适当的 HTML 解析器来提取链接(如果内容是 XHTML,
xmlstarlet可以解决问题;xmllint --html可以将 HTML 转换为 XHTML,如果不是),而不是试图到处乱搞grep. -
另外,你有一堆引用错误。 shellcheck.net 会向你指出这些。
-
不过,除此之外,如果没有您正在使用的 real URL,或者在某个地方粘贴复制错误的示例 HTML 文件(如果您无法显示正版代码)?
-
另外,你根本不需要 grep 来提取日期; bash 内置了带有
=~运算符的正则表达式支持。