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]*'