bash extrai uma substring de “1.2.3-SNAPSHOT”

1

Como posso substring um 1.2.3 de um 1.2.3-SNAPSHOT de bash?

Eu tentei

echo '1.2.3-SNAPSHOT' | grep -o "^.*(?=(\-SNAPSHOT$))"

mas não funcionou

Idealmente, gostaria que um comando retornasse 1.2.3 em ambos os casos se a entrada fosse 1.2.3 ou 1.2.3-SNAPSHOT

    
por andreybavt 29.12.2015 / 14:02

4 respostas

0

Você poderia, por exemplo. use egrep assim:

echo "1.2.3-SNAPSHOT" | egrep -o '[0-9]+.[0-9]+.[0-9]'

Ele cobre o cenário que você descreveu:

return 1.2.3 in both cases if the input is 1.2.3 or 1.2.3-SNAPSHOT

Mas eu suspeito que a versão também poderia ser como: "3.1.33" (mais dígitos no terceiro número), neste caso apenas adicionando um * faz o trabalho

echo "3.12.32-SNAoiashfsof" | egrep -o '[0-9]+.[0-9]+.[0-9]*'
    
por 29.12.2015 / 14:06
1

bash expansão de parâmetros deve ser suficiente

var='1.2.3-SNAPSHOT'
echo "${var%%-*}"
1.2.3
var='1.2.3'
echo "${var%%-*}"
1.2.3
    
por 29.12.2015 / 16:08
0
sed -ne's/^\(1\.2\.3\)\(-SNAPSHOT\)\{0,1\}$//p' <in >out

... que imprimirá 1.2.3 para saída apenas para linhas de entrada que correspondam totalmente a 1.2.3 ou 1.2.3-SNAPSHOT .

    
por 29.12.2015 / 14:12
0

Outra opção ...

echo "1.2.3-SNAPSHOT" | cut -d'-' -f1
    
por 29.12.2015 / 14:12