如何在字符串中匹配后仅获取一个字符(从 rpm 确定 RHEL 版本)

如何在字符串中匹配后仅获取一个字符(从 rpm 确定 RHEL 版本)

我有一个开源 shell/bash 脚本,用于设置和配置托管服务器,为了安装 cloudflare,我使用拉取 RHEL 版本这个命令:

RHEL_VERSION=$(rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release) );

问题是,如果存在次要版本,则会返回该次要版本,而不仅仅是主要版本。使用上面的 cmd 它将返回7.2...问题是,我只需要主版本号。

我想我可能可以只使用它rpm -q --whatprovides redhat-release会返回类似cloudlinux-release-7.2-1.el7.x86_64, 然后只是sed,awk等来获取el7字符串的一部分。

我需要它才能在创建包 URL 时使用该字符串:

PACKAGE_URL="http://pkg.cloudflare.com/cloudflare-release-latest.el${RHEL_VERSION}.rpm"

答案1

要截取主要版本组件,只需执行以下操作:

... | grep -Eo '^[0-9]*'

-o此扩展选项grep仅打印匹配的部分;这里,第一个数字前面有一个点字符。

答案2

$ RHEL_VERSION=7.2-1.el6
$ echo "${RHEL_VERSION%%[!0-9]*}"
7
$ echo "${RHEL_VERSION%%-*}"
7.2
$ echo "${RHEL_VERSION##*.}"
el6
$ echo "${RHEL_VERSION##*[!0-9]}"
6

答案3

我没有转速在这个系统上,但我设法做到了这一点巴什:

PROVIDED=cloudlinux-release-7.2-1.el7.x86_64
RHEL_VERSION=`echo $PROVIDED  | sed 's/^.*-release-\([0-9]\).*/\1/'  
echo $RHEL_VERSION 

输出“ 7”。

如果需要,您可以将“ -release-”替换为更合适的正则表达式。

您可以尝试以下方法:

echo $PROVIDED  |  sed -ne 's/^[^-]*-\([^-]*\)-.*$/\1/p'

release它为我 返回“ ”[--版本:sed (GNU sed) 4.2.2]

答案4

您可能还想咨询这个很棒的答案关于可靠地确定您的操作系统名称(和版本)。根据该答案,您可以执行以下操作:

RHEL_VERSION="$(lsb_release -r | awk '{print $NF}')"

然后使用提供的任何其他答案来提取主版本号。优点是这种方法比 RHEL 适用于更多发行版。

如果您确定版本号将是纯数字(用小数点分隔主要数字和次要数字,您可以一举完成这一切:

RHEL_MAJOR_VERSION="$(lsb_release -r|awk '{printf "%d\n",$N}')"

相关内容