我正在运行一个小的curl命令来从网页中检索以下信息。 我想从这个输出中收到任何损坏文件的“最新版本” 问题是。要记住的是有RC数字,这也是 在循环内部(下面的代码),并且输出可能并不总是有序。
输入
facter-1.7.5-rc1.dmg
facter-1.7.5-rc2.dmg
facter-1.7.5.dmg
facter-1.7.6.dmg
facter-2.0.1-rc1.dmg
facter-2.0.1-rc2.dmg
facter-2.0.1-rc3.dmg
facter-2.0.1-rc4.dmg
facter-2.0.1.dmg
facter-2.0.2.dmg
facter-2.1.0.dmg
facter-2.2.0.dmg
facter-2.3.0.dmg
预期输出
facter-2.3.0.dmg
当前正在处理它的循环
function get_latest()
{
local url="$1"
local name="$2"
for pkg in $(wget -q "${url}" -O - |grep -o ">${name}.*dmg" |cut -c 2-); do
echo "${url}/${pkg}";
done
}
FACTER_URL="$(get_latest 'http://downloads.puppetlabs.com/mac/' 'facter')"
echo $FACTER_URL ##http://downloads.puppetlabs.com/mac/facter-2.3.0.dmg
答案 0 :(得分:2)
您可以在此处使用sort -V
:
sort -rV file | head -1
facter-2.3.0.dmg
根据man sort
:
-V, --version-sort
natural sort of (version) numbers within text
PS:这也会照顾rc
个版本。
答案 1 :(得分:0)
另一种方法(我使用适当的XML / HTML解析器):
get_latest() {
local url="$1"
local name="$2"
printf '%s\n' $(xmllint --html --xpath "//a/@href[contains(., '$2')]" $url) |
sort -V |
awk -F'"' 'END{print url$2}' url=$url
}
get_latest 'http://downloads.puppetlabs.com/mac/' 'facter'
输出:
http://downloads.puppetlabs.com/mac/facter-2.3.0.dmg
注意:
xmllint
附带libxml2-utils
debian
和衍生物