Como obter apenas um caractere após a correspondência em string (para determinar a versão do RHEL a partir do rpm)

1

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"
    
por sMyles 18.12.2015 / 20:33

4 respostas

1

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.

    
por 18.12.2015 / 21:26
1
$ 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
    
por 20.12.2015 / 04:17
0

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] .

    
por 18.12.2015 / 22:43
0

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}')"
    
por 20.12.2015 / 06:03