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
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
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)
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 é?
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
Tags bash rpm version shell-script