【发布时间】:2015-11-17 03:11:14
【问题描述】:
我创建了一个丑陋的单行,但我想让它更简单,更容易让其他人阅读。它在 dockerfile 中使用,该文件用作脚本来构建将与 Docker 一起运行的映像。
curl -s -L http://www.nxfilter.org/|grep Download|sed -e 's/<a /\n<a /g'|;
sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'|;
xargs -n1 curl -s -L|grep zip|sed -e 's/<a /\n<a /g'|;
sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'|;
grep -v dropbox|grep -v logon|grep -v cloud|grep zip
或者不用手动换行
curl -s -L http://www.nxfilter.org/|grep Download|sed -e 's/<a /\n<a /g'|sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'|xargs -n1 curl -s -L|grep zip|sed -e 's/<a /\n<a /g'|sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'|grep -v dropbox|grep -v logon|grep -v cloud|grep zip
第 1 步:访问 nxfilter.org 并按照重定向获取 www.nxfilter.org/p2/index.html
第 2 步:解析主页 HTML 以获取下载页面 www.nxfilter.org/p2/?page_id=93 的 URL(这是一个博客类型的网站,该页面将来可能会更改)
第 3 步:将下载页面 HTML 解析为 nxfilter*.zip 的 URL,当前为 http://nxfilter.org/download/nxfilter-3.0.5.zip
第 4 步:下载为 nxfilter.zip
第 5 步:Dockerfile 继续执行命令来设置 NxFilter 将在最终 Docker 容器中运行的环境。
当然有更简单的方法来获取 .zip 的 URL
Easiest way to extract the urls from an html page using sed or awk only
【问题讨论】:
-
您应该使用管道,但我会将其拆分为多行以提高可读性
-
我觉得人们通常会通过创建指向最新版本的符号链接并将其命名为
nxfilter-latest.zip来解决这个问题。但我假设你不是这个 nxfilter 文件的提供者。 -
没错,我正在重新打包其他人的应用程序以用作 Docker 映像。我的主要目的是让我的脚本在每次调用时都能找到最新的包。每次更新下载页面时,我都会使用 IFTTT 或 Zapier 对 Docker Hub 进行 webhook 调用。自动化我当前的工作流程,让 IFTTT 观看 nxfilter 网站上下载页面的 Page2RSS 提要,并在更改时给我发电子邮件。然后我手动获取 .zip URL 并将其粘贴到 GIT 中的 Dockerfile 中,当我提交时 Docker 集线器会自动构建该文件。
-
或许改用this URL?
-
看看像
xmlstarlet或xmllint这样的xml解析命令。html基于xml,但它在许多网站(许多未封闭的标签)上并不是严格的 xml 代码...AFAIR,xmllint有一些支持此类 html 代码的选项。跨度>
标签: bash dockerfile