我正在写一个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
这会将“无法检索最新版本号”打印到控制台。
那么,这是旋度的一个限制,还是正则表达式本身就是错误的?
2条答案
按热度按时间sxissh061#
此命令获取所有版本的列表
如果需要最新版本,请在末尾追加
| head -n 1
。42fyovps2#
你可能会击中我遇到的试图重现你的问题。
如果我在浏览器中打开发布页面,然后“保存页面另存为",然后使用文本编辑器打开html页面,则目标行显示为
您的逻辑似乎正在尝试解析该行格式。
简化(以确保我们的结果正确),当我尝试修改后的命令时
报告中 * 没有预期格式的行 *。2这意味着某些东西正在动态地推送您希望捕获的附加细节。
然而,如果我使用firefox插件“Download Serialized DOM”将完全“重组”的网页保存到磁盘,文本编辑器现在会找到所需的模式。
因此,您需要使用类似的方法。
另外,我建议在数字匹配之前使用“grep 'anchorLink'",以消除虚假的数字引用。
最后,您需要更具体地使用排序例程,以获得您真正想要的顺序: