【问题标题】:linux + print linux version ( one single character as 5 or 6 .. etc )linux + 打印 linux 版本(单个字符为 5 或 6 .. 等)
【发布时间】:2014-11-30 17:43:24
【问题描述】:

我创建了以下行,以验证 Linux 版本(如 red hat 5.X 或 4.X 等)

我觉得我的台词太长了,不够优雅

awk -F"release" '{print $2}'  /etc/redhat-release | awk '{print $1}' | sed s'/\./ /g' | awk '{print $1}'

5

测试:

$ LINUX_VERSION=` awk -F"release" '{print $2}'  /etc/redhat-release | awk '{print $1}' | sed s'/\./ /g' | awk '{print $1}' `
$ echo $LINUX_VERSION
5

也许有人可以提供更优雅的方式来打印 Linux 版本?

$ more /etc/redhat-release 
Red Hat Enterprise Linux Server release 5.4 (Tikanga)

【问题讨论】:

标签: linux bash perl awk sed


【解决方案1】:

不解析文件。让 RedHat 系统版本实践告诉你你想要什么。请参阅man yum.conf 中有关releasever 的文档。

运行rpm -qf --qf '%{version}\n' /etc/redhat-release

如果您真的只需要这个数字(即使官方版本是 5Server5Client),那么您需要使用以下内容将其取出:

v=$(rpm -qf --qf '%{version}\n' /etc/redhat-release)

echo "${v%%[a-zA-Z]*}"
# or
echo "$v" | grep -o '^[0-9]*'
# or 
echo "$v" | tr -d 'a-zA-Z'

或任何你喜欢的东西。

【讨论】:

  • 看看我得到了什么 - rpm -qf --qf '%{version}\n' /etc/redhat-release 5Server(为什么 server word 也出现了)
  • @maihabunash 因为那是版本。红帽就是这样做的。它们可以具有所有 5、5Server 和 5Client 版本。我不知道为什么或有什么差异,但它们在 RH 世界中是不同的东西。以http://ftp.redhat.com/pub/redhat/linux/enterprise/ 为例。
  • 但我只需要数字吗? (你能更新到只看到数字吗?)
  • 请注意,您可能需要grep -o '^[0-9]*',因为将来版本可能包含两位数。
  • @fedorqui yum.conf 手册页参考主要是为了指出这里涉及的包是 yum 用来在其 URL 中填充 $release 作为此方法有效性的备份的包. (请参阅rpm -qf /etc/redhat-release 以获取完整的包名,而不仅仅是版本等)
【解决方案2】:

这就是lsb_release 命令的用途。

$ lsb_release -sr
5.8

或者,通过一些后期处理来获得主要版本:

$ lsb_release -sr | perl -lnE '/(\d+)/ and say $1'
5

【讨论】:

    【解决方案3】:
     awk -v RS='[. ]' '/[0-9]+/{print;exit}'
    

    说明

    • 将记录分隔符更改为空格或.。空格可以更轻松地浏览所有单词;和 . 将版本分隔为 2 条记录

    • Print 记录和exit 当记录是数字时

    假设

    • 版本是在输入中找到的第一个数字

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-21
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多