【问题标题】:yum list get last available packageyum list 获取最后一个可用的包
【发布时间】:2021-04-12 18:55:09
【问题描述】:

我需要在存储库中提取我最新可用包的子字符串

yum list myCompany-apps-MYPROJECT*

可用的包

myCompany-apps-MYPROJECT-0.0.0.41-210409.noarch                      1-160                       myproject
myCompany-apps-MYPROJECT-0.0.0.42-210412.noarch                      1-162                       myproject
myCompany-apps-MYPROJECT-0.0.0.43-210412.noarch                      1-163                       myproject
myCompany-apps-MYPROJECT-0.0.0.44-210412.noarch                      1-173                       myproject
myCompany-apps-MYPROJECT-0.0.0.45-210412.noarch                      1-174                       myproject
myCompany-apps-MYPROJECT-0.0.0.46-210412.noarch                      1-176                       myproject
myCompany-apps-MYPROJECT-0.0.0.47-210412.noarch                      1-179                       myproject
myCompany-apps-MYPROJECT-1.0.0.1-210407.noarch                       1-146                       myproject
myCompany-apps-MYPROJECT-1.0.0.2-210407.noarch                       1-147                       myproject
myCompany-apps-MYPROJECT-1.0.0.3-210408.noarch                       1-149                       myproject
myCompany-apps-MYPROJECT-1.0.0.4-210408.noarch                       1-150                       myproject

我想在 MYPROJECT 之后和日期时间之前提取部分

我试过了:

function lastVersion () {
  last_version=$(yum list myCompany-apps-MYPROJECT* | grep "myCompany-apps-MYPROJECT" | awk '{ print $1 }'| awk -F "-" '{ print $4 }' | sort -V | tail -1)
  echo ${last_version}
}

输出是:1.0.0.4,我需要它是:0.0.0.47(第 2 列 (1-179) 中指示的最新输出,第二列到底是什么?)

非常感谢

【问题讨论】:

  • the latest one as indicated in the 2nd column (1-179) 然后使用第二列排序?

标签: awk grep yum


【解决方案1】:

多合一 awk 脚本...

... | awk '!/myCompany-apps-MYPROJECT/ {next} 
                                       {sub("-",".",$2)} 
                                max<$2 {max=$2; split($1,f,"-"); maxV=f[4]} 
                                   END {print maxV}' file

0.0.0.47

【讨论】:

  • 谢谢,这个解决方案对我来说很容易理解
【解决方案2】:

用正则表达式提取你想要的数据和你想要排序的数据。然后对你要排序的数据进行排序,把你感兴趣的数据省略掉。

yum ... | grep "myCompany-apps-MYPROJECT" |
    sed 's/.*-\([^-]*\)-[^ ]* *[0-9]*-\([0-9]*\).*/\1 \2/' |
    sort -k2n | tail -n1 | cut -d' ' -f1

您可以使用 regexcrosswords ex 快速学习正则表达式。 https://regexcrossword.com/.

【讨论】:

  • @KamiCuk 非常感谢它完美地工作,但我必须承认我根本不理解 sed 部分。你有更简单的吗?此外,这是否适用于未来的包(例如 1-1200)?也许有一个更简单的解决方案,使用 yum list 按日期检索最后一个包?
猜你喜欢
  • 2014-11-29
  • 1970-01-01
  • 2020-01-23
  • 2017-03-19
  • 2013-10-27
  • 2018-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多