regex - 如何直接在正则表达式模式之后找到最大整数?

标签 regex bash awk

我正在编写一个 bash 脚本,它将 curl 所有以 1. 开头的版本号,其中 subversion 高于 10。它从 RSS 页面获取此版本号,并使用 awk grep 和正则表达式的组合将它们打印在新行上。

curl -v --silent https://website.com.rss 2>&1 | awk -F '<title>|<\/title>' '{print $2}' | grep "^1\.[0-9][0-9]\."

上面的命令产生:

1.10.1
1.10.2
1.10.3
1.11.1
1.11.2
1.11.4

我试图让输出仅显示每个子版本的最高子子版本。例如,从上面的输出我只想得到:

1.10.3
1.11.4

因为它们都是各自子版本的最新版本。

我不太确定如何实现这一目标,或者是否可能实现。我认为我需要一个循环来使用可能的另一个正则表达式来查看每个循环,但我被难住了。有什么建议吗?

最佳答案

在 awk 中(使用 @sergio 的数据):

$ awk '
BEGIN{FS=OFS="."}
$3 > a[$1 "." $2] { 
    a[$1 "." $2]=$3
}
END {
    for(i in a) 
        print i,a[i]
}' file
1.10.3                                                                          
1.11.4                                                                          
1.12.13                                                                         
1.13.4 

输出顺序是awk for默认的,即。出现随机。

关于regex - 如何直接在正则表达式模式之后找到最大整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301996/

相关文章:

javascript - 在正则表达式中允许点 (.)

bash - 使用 shell 脚本打开新的 Ubuntu 选项卡,然后在这些新选项卡中运行命令

regex - bash - 提取字符串的一部分

python - 为什么4种不同的语言在这里给出4种不同的结果?

linux - 如何将文件中特定列中的唯一值更改为 linux 中的另一个值?

python - 排除 ".txt"个文件

python - Python 中除空格外的正则表达式匹配

node.js - Node 在 Windows 上的 Ubuntu 上无法在 Bash 上运行

bash - 创建与列值匹配的文件

regex - 数字位数未知的 VB 模式