Мне нужно получить только цифры из этого: release/M_0.1.0, таким образом, нужно извлечь с помощью bash, чтобы иметь в выводе следующее: 0.1.0.Я пробовал это, но не могу закончить: echo "release/M_0.1.0" | awk -F'/' '{print $2}'
release/M_0.1.0
0.1.0
echo "release/M_0.1.0" | awk -F'/' '{print $2}'
А что, если дать такую строку?relea234se/sdf23_4Mm0.1.0.8.Как получить только 0.1.0.8?Обратите внимание, что это могут быть случайные цифры, такие как 0.2 или 1.9.1.
relea234se/sdf23_4Mm0.1.0.8
0.1.0.8
0.2
1.9.1
Вы также можете использовать синтаксический анализ расширения общих параметров, чтобы буквально удалять символы до последнего, который не является цифрами или точками.
$: ver() { echo "${1//*[^.0-9]/}"; } $: ver release/M_0.1.0 0.1.0 $: ver relea234se/sdf23_4Mm0.1.0.8 0.1.0.8
С sed вы можете сделать:
sed
echo "release/M_0.1.0" | sed 's@.*_@@'
Выход :
Проверьте, работает ли эта команда grep
grep
echo "release/M_0.1.0" | egrep -o '[0-9.]+'
если данные в d файле, попробуйте на GNU SED:
d
sed -E 's/relea.*/.*([0-9][0-9.]*)$/\1/' d
Выберите:
$ var='relea234se/sdf23_4Mm0.1.0.8' $ [[ $var =~ .*[^0-9.](.*) ]] && echo "${BASH_REMATCH[1]}" 0.1.0.8 $ echo "$var" | sed 's/.*[^0-9.]//' 0.1.0.8 $ echo "$var" | awk -F'[^0-9.]' '{print $NF}' 0.1.0.8
echo release/M_0.1.0 | awk -F\_ '{print $2}' 0.1.0
Учитывая, что ваш Input_file будет таким же, как показанные образцы.
echo "$var" | awk -F'_' '{print $2}'
ИЛИ может использовать sub:
sub
echo "$var" | awk '{sub(/.*_/,"")} 1'
С простымbash вы можете использовать:
echo "${var#*_}"