Extrai apenas a parte da versão de um nome de pacote com o bash

1

Gostaria de extrair de um nome de pacote apenas a versão do pacote. Supondo que eu tenha uma variável var que contenha um nome de pacote (por exemplo, var="nfs-utils-1.2.6-6.fc17.i686.rpm" ). A string extraída seria 1.2.6-6 . O método usado para analisar pode ser qualquer coisa (regex, awk, cut).

Editar: No exemplo acima, eu gostaria de extrair 1.2.6

    
por LinuxLearner 20.01.2017 / 19:49

4 respostas

4

Isso não é muito portátil, mas, para esse caso específico, esse grep funciona:

echo $var | egrep -o '[0-9].*-[0-9]'
1.2.6-6
    
por 20.01.2017 / 20:19
4

Como o thrig disse, se você está extraindo os valores no mesmo sistema onde os pacotes estão instalados, você pode perguntar ao RPM pela versão diretamente:

ver=$(rpm --queryformat="%{VERSION}" -q nfs-utils)
    
por 21.01.2017 / 16:21
0

Usando apenas o bash power, é o melhor que encontrei até agora:

varnums=$(echo ${var//[^0-9]/ })
var_version=${varnums// /.}
echo $varversion 

O retorno será assim:

1.2.6.6.17.686

Não é tão ruim não é?

    
por 20.01.2017 / 20:31
0

Os últimos 2 '-' caracteres cercam a versão.

Então, pode-se escrever um * RE que esteja ancorado no final da string com um '$'

Por exemplo,

$ echo nfs-utils-1.2.6-6.fc17.i686.rpm | sed -e 's,.*-\([^-]*\)-[^-]*$,,'

1.2.6

    
por 09.02.2017 / 20:14