shell Curl命令从URL返回空

8tntrjer  于 2023-03-13  发布在  Shell
关注(0)|答案(2)|浏览(207)

我正在写一个shell脚本,它将安装在Pop!_OS上安装Docker Desktop的先决条件,一旦这些条件得到满足,它将安装最新版本的Docker Desktop。更多的是学习shell脚本的练习。

尝试1

#!/bin/bash

# get the latest version number
latest_version=$(curl -s https://docs.docker.com/desktop/release-notes/ | grep -oP '(?<=#)[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?' | head -n 1)
printf "$latest_version"

这不会在屏幕上打印任何内容。
尝试2

#!/bin/bash

# get the latest version number
version=$(curl -s https://docs.docker.com/desktop/release-notes/ \
| grep -oE '/desktop/release-notes/#[0-9]+\.[0-9]+\.[0-9]+' \
| grep -oE '[0-9]+\.[0-9]+\.[0-9]+' \
| sort -rn \
| head -n 1)

# check if version number is empty
if [ -z "$version" ]; then
    echo "Unable to retrieve the latest version number."
    exit 1
fi

这会将“无法检索最新版本号”打印到控制台。

那么,这是旋度的一个限制,还是正则表达式本身就是错误的?

sxissh06

sxissh061#

此命令获取所有版本的列表

curl -s https://docs.docker.com/desktop/release-notes/ | grep -oP '<h2 id=.*>\K.*(?=<.*)'

如果需要最新版本,请在末尾追加| head -n 1

42fyovps

42fyovps2#

你可能会击中我遇到的试图重现你的问题。
如果我在浏览器中打开发布页面,然后“保存页面另存为",然后使用文本编辑器打开html页面,则目标行显示为

<h2 id="4170">4.17.0<a href="#4170" class="anchorLink">{image}</a></h2>

您的逻辑似乎正在尝试解析该行格式。

简化以确保我们的结果正确),当我尝试修改后的命令时

curl -s https://docs.docker.com/desktop/release-notes/ | grep 'href="#'

报告中 * 没有预期格式的行 *。2这意味着某些东西正在动态地推送您希望捕获的附加细节。
然而,如果我使用firefox插件“Download Serialized DOM”将完全“重组”的网页保存到磁盘,文本编辑器现在会找到所需的模式。
因此,您需要使用类似的方法。
另外,我建议在数字匹配之前使用“grep 'anchorLink'",以消除虚假的数字引用。
最后,您需要
更具体
地使用排序例程,以获得您真正想要的顺序:

sort -t. -k 1,1nr -k 2,2nr -k 3,3nr

相关问题