bash-grep只对数字进行比较curl命令的



Index.html如下所示。

<html>
<head><title>Index of myorg/release/builds/production/</title>
</head>
<body>
<h1>Index of myorg/release/builds/production/</h1>
<pre>Name                                        Last modified      Size</pre><hr/>
<pre><a href="../">../</a>
<a href="1.0.60/">1.0.60/</a>                                      06-Jul-2022 07:47    -
<a href="1.0.63/">1.0.63/</a>                                      06-Jul-2022 10:21    -
<a href="1.0.64/">1.0.64/</a>                                      09-Jul-2022 18:08    -
<a href="1.0.65/">1.0.65/</a>                                      09-Jul-2022 18:42    -
<a href="1.0.71/">1.0.71/</a>                                      10-Jul-2022 10:23    -
<a href="1.0.73/">1.0.73/</a>                                      14-Jul-2022 17:28    -
<a href="1.0.75/">1.0.75/</a>                                      20-Jul-2022 07:25    -
<a href="%f%7D/">{STOCKIO}/</a>                                 24-May-2022 11:09    -
<a href="dashboard-react-module-1.0.29.tar.gz">dashboard-react-module-1.0.29.tar.gz</a>          24-May-2022 07:27  87.74 MB
<a href="dashboard-react-module-1.0.29.tar.gz.md5">dashboard-react-module-1.0.29.tar.gz.md5</a>      24-May-2022 07:27  32 bytes
<a href="dashboard-react-module-1.0.29.tar.gz.sha1">dashboard-react-module-1.0.29.tar.gz.sha1</a>     24-May-2022 07:27  40 bytes
<a href="dashboard-react-module-1.0.29.tar.gz.sha256">dashboard-react-module-1.0.29.tar.gz.sha256</a>   24-May-2022 07:27  64 bytes
<a href="dashboard-react-module.tar.gz">dashboard-react-module.tar.gz</a>                 24-May-2022 07:27  87.74 MB
<a href="dashboard-react-module.tar.gz.md5">dashboard-react-module.tar.gz.md5</a>             24-May-2022 07:27  32 bytes
<a href="dashboard-react-module.tar.gz.sha1">dashboard-react-module.tar.gz.sha1</a>            24-May-2022 07:27  40 bytes
</pre>
<hr/><address style="font-size:small;">Artifactory/6.23.41 Server .myorg.com Port 80</address></body></html>

我无法构造逻辑来查找文件中最大的条目,这里是-1.0.75

我试着只输出像-grep -E "[[:digit:]].[[:digit:]].[[:digit:]]{1,4}" index.html这样的数字,但它抛出了与上面相同的输出。

我的想法是将所有像1.0.60, 1.0.63 ...这样的数字条目放入一个数组中,剪切数字的最后一部分并进行比较以获得最大的数字,但无法找到只给出数值的正确grep命令。

或者有没有更有效的方法来做到这一点?

使用sed过滤数据,sort排列(在未排序的情况下(,tail显示最后(最大(条目

$ sed -En '/href/s~[^>]*>([0-9][^/]*).*~1~p' input_file | sort -n | tail -1
1.0.75
  • 匹配包含字符串href的行
  • 在括号内捕获匹配项并排除所有其他项
  • 返回具有背景参考1的比赛
  • 按数字对管道输出进行排序
  • 打印最后一行(最高值(

使用您显示的示例和尝试,请尝试以下带有head解决方案的GNUawk+sort

awk 'match($0,/<a href="([0-9]+(.[0-9]+)*)/,arr){print arr[1] | "sort -rV | head -1"}' Input_file

解释:使用awk程序将Input_file解析到它。其中使用其match函数,其中使用正则表达式<a href="([0-9]+(.[0-9]+)*/)创建匹配值的捕获组,以使其中只有版本。GNUawk能够将匹配的正则表达式值作为值存储到数组中,从而创建只包含版本值的arr数组。然后用|运行BASH命令sort -rV(Version sort(,使其反向排序(降序(,一旦打印出所有值;将该输出发送到CCD_ 21命令,并且仅打印将是最高版本的第一个输出。

毫无疑问,有很多方法可以做到这一点。。

cat foo1.x | grep 'href="[0-9]' | sed -E 's/.*href=.1.0.([0-9]+).*/1/' | sort -u -n | tail -1

版本在index.html.中排序

获取最后一个

awk -F'["/]' '/href="([0-9]+.[0-9]+.[0-9]+)/"/{n=$2}END{print n}' index.html
1.0.75

如果版本未排序

awk -F'["/]' '
/href="([0-9]+.[0-9]+.[0-9]+)/"/ { a[NR]=$2 } 
END{
asorti(a,b,"@val_num_desc");
print a[b[1]]
}
' index.html
1.0.75

最新更新