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