Obtendo o número da versão após o nome e a extensão da biblioteca no Bash

1

Como posso obter o número da versão depois de um arquivo .so usando o Bash?

Eu obtive o caminho completo da biblioteca e extraí o nome. Como libpcap.so.1.1.1 . Agora preciso obter o número da versão depois de so ; por exemplo:

libpcap.so.1.1.1 --> 1.1.1
libusb-0.1.so.4.4.4 --> 4.4.4
libpcap.so.1.8.0-PRE-GIT --> 1.8.0

Editar: um código de amostra usando o grep pode manipular os dois primeiros exemplos. Mas não o terceiro.

grep -Eo '[0-9][^[:alpha:]]+$' <<<'libpcap.so.1.5.3'
    
por ManiAm 18.01.2016 / 19:55

3 respostas

3

Eu não garantirei que ele pegará todos os casos, mas que tal

grep -Po '\.so\.\K([0-9]+\.)*[0-9]+'
  • corresponde e descarta o literal .so. à esquerda (usando o modificador% FRP% do PCRE)
  • corresponde a zero ou mais ocorrências de um ou mais dígitos seguidos por \K
  • corresponde a um ou mais dígitos

Observe que não queremos ancorá-lo no final da string ( . ) como sua expressão original, para permitir uma sequência à direita, como $

    
por steeldriver 18.01.2016 / 20:36
1

Usando awk :

awk -F'.so.' '{match(,/([0-9]+\.*)+/);print substr(, RSTART, RLENGTH)}

Exemplos

$ awk -F'.so.' '{match(,/([0-9]+\.*)+/);print substr(, RSTART, RLENGTH)}' <<<'libpcap.so.1.8.0-PRE-GIT1'
1.8.0

$ awk -F'.so.' '{match(,/([0-9]+\.*)+/);print substr(, RSTART, RLENGTH)}' <<<$'libpcap.so.1.1.1\nlibusb-0.1.so.4.4.4\nlibpcap.so.1.8.0-PRE-GIT' 
1.1.1
4.4.4
1.8.0
    
por A.B. 18.01.2016 / 20:42
-1

Isso funciona para os exemplos que você forneceu e funcionará contanto que a string de entrada siga o padrão .*\.so\.[0-9.]*.* :

grep -Po '.*\.so.\K[0-9.]*' <<<'libpcap.so.1.1.1'

Ele corresponderá à maior sequência possível de dígitos / pontos após a última .so. de substring, se houver.

% grep -Po '.*\.so.\K[0-9.]*' <<<$'libpcap.so.1.1.1\nlibusb-0.1.so.4.4.4\nlibpcap.so.1.8.0-PRE-GIT'
1.1.1
4.4.4
1.8.0
    
por kos 18.01.2016 / 20:39