Para recortar o componente principal da versão, basta fazer:
... | grep -Eo '^[0-9]*'
A opção -o
para este grep
estendido imprime apenas a parte correspondente; aqui, o primeiro dígito (s) precedido por um caractere de ponto.
Eu tenho um script shell / bash de software livre para configuração e configuração de servidores de hospedagem e para instalar o cloudflare, estou usando a versão do RHEL usando este comando :
RHEL_VERSION=$(rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release) );
O problema é que, se houver uma versão secundária, ela será retornada em vez de apenas a versão principal. Com o cmd acima ele irá retornar 7.2
... problema é, eu só preciso do número da versão principal.
Estou pensando que provavelmente posso usar apenas o rpm -q --whatprovides redhat-release
que retornaria algo como cloudlinux-release-7.2-1.el7.x86_64
e, em seguida, apenas sed
, awk
, etc para obter apenas a parte el7
da sequência.
Eu preciso disso para poder usar a string ao criar o URL do pacote:
PACKAGE_URL="http://pkg.cloudflare.com/cloudflare-release-latest.el${RHEL_VERSION}.rpm"
$ 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
Eu não tenho rpm em mãos neste sistema, mas consegui fazer isso com bash :
PROVIDED=cloudlinux-release-7.2-1.el7.x86_64
RHEL_VERSION='echo $PROVIDED | sed 's/^.*-release-\([0-9]\).*//'
echo $RHEL_VERSION
que produz " 7
".
Se necessário, você pode substituir " -release-
" por um regexp mais adequado.
Você pode tentar coisas como:
echo $PROVIDED | sed -ne 's/^[^-]*-\([^-]*\)-.*$//p'
que retorna " release
" para mim
[- versão: sed (GNU sed) 4.2.2] .
Você também pode querer consultar esta fantástica resposta sobre como determinar seu nome de SO (e versão) de forma confiável. Com base nessa resposta, você pode fazer algo como:
RHEL_VERSION="$(lsb_release -r | awk '{print $NF}')"
e, em seguida, use qualquer uma das outras respostas fornecidas para extrair o número da versão principal. A vantagem é que essa abordagem funciona para mais distros que o RHEL.
Se tiver certeza de que o número de lançamento será puramente numérico (com um ponto decimal separando os números maior e menor, você poderá fazer tudo de uma só vez:
RHEL_MAJOR_VERSION="$(lsb_release -r|awk '{printf "%d\n",$N}')"
Tags version shell-script string