我需要编写一种方法来将 Red Hat 盒子的实际版本级别拉入变量中。
我正在专注于/etc/redhat-release
文件。我以为这会是一个简单的awk '{ print $7 }'
,但是 RH8 已将值更改为第 6 个字,因此简单的解决方案就消失了。 (我在这个网站上搜索了类似的问题,但答案都与该值的稳定位置有关。在这种情况下,我们不知道操作系统版本将位于哪个字段号中)。
例子:
Red Hat Enterprise Linux Server release 6.10 (Santiago)
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Red Hat Enterprise Linux release 8.6 (Ootpa)
Red Hat Enterprise Linux release 8.5 (Ootpa)
我认为使用sed
是我最好的选择。
6.
找到第一个以、7.
或开头的单词8.
,并获取该值 ([678]\.
)。这可能是最安全的。或者抓住 后的第一个单词
release
。
sed
我想知道对于使用或awk
其他工具来完成此操作的良好、简单的方法有何建议?
答案1
您可以解析其中之一release
您可以解析可能包含的
我认为 RHEL/etc/os-release
可以通过简单地获取变量来提供操作系统版本:
source /etc/os-release; echo $VERSION_ID
它还包括许多其他方便的操作系统相关变量。
答案2
您可以lsb_release
为此使用:
$ lsb_release -rs
8.6
另一种方法,不需要lsb_release
是解析/etc/os-release
(这是建议RHEL 9 及更高版本):
awk -F'[="]' '/VERSION_ID/ { print $3 }' /etc/os-release
答案3
您可以通过执行以下操作来隔离字符串中最后一个字段之前的字段:
... awk '{print $(NF-1)}'
例如:
echo "Red Hat Enterprise Linux Server release 6.10 (Santiago)"|awk '{print $(NF-1)}'
6.10
echo "Red Hat Enterprise Linux release 8.5 (Ootpa)"|awk '{print $(NF-1)}'
8.5
答案4
cat file.txt
Red Hat Enterprise Linux Server release 6.10 (Santiago)
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Red Hat Enterprise Linux release 8.6 (Ootpa)
Red Hat Enterprise Linux release 8.5 (Ootpa)
输出
awk '{for(i=1;i<=NF;i++){if($i ~ /[0-9]/){print $i}}}' file.txt
6.10
7.9
8.6
8.5