Использование подстановок строк:
s='olap4j-xmla-1.0.1.500'
read var1 var2 <<< "${s%-*} ${s##*-}"
Теперь проверьте переменные:
declare -p var1 var2
declare -- var1="olap4j-xmla"
declare -- var2="1.0.1.500"
Обновление:
Спасибо за комментарий отpjh ниже Я понял, что OP требует 3 переменных для некоторых случаев вместо 2.
Глядя на это, я думаю, что следующее sed
будет работать лучше:
sed -E 's/^(.+)-([0-9.]+)(\.([^0-9]+))?$/\1 \2 \4/' <<< "olap4j-xmla-1.2.0.SNAPSHOT"
olap4j-xmla 1.2.0 SNAPSHOT
sed -E 's/^(.+)-([0-9.]+)(\.([^0-9]+))?$/\1 \2 \4/' <<< "olap4j-xmla-1.2.0"
olap4j-xmla 1.2.0
Вывод sed
можно вводить в read
, как показано в приведенных выше примерах.