Получить только цифры в выводе - PullRequest
0 голосов
/ 25 апреля 2019

Мне нужно получить только цифры из этого: release/M_0.1.0, таким образом, нужно извлечь с помощью bash, чтобы иметь в выводе следующее: 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.

Ответы [ 7 ]

3 голосов
/ 25 апреля 2019

Вы также можете использовать синтаксический анализ расширения общих параметров, чтобы буквально удалять символы до последнего, который не является цифрами или точками.

$: 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
2 голосов
/ 25 апреля 2019

С sed вы можете сделать:

echo "release/M_0.1.0" | sed 's@.*_@@'

Выход :

0.1.0
1 голос
/ 25 апреля 2019

Проверьте, работает ли эта команда grep

echo "release/M_0.1.0" | egrep -o '[0-9.]+'
0 голосов
/ 26 апреля 2019

если данные в d файле, попробуйте на GNU SED:

sed -E 's/relea.*/.*([0-9][0-9.]*)$/\1/' d
0 голосов
/ 25 апреля 2019

Выберите:

$ 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
0 голосов
/ 25 апреля 2019
echo release/M_0.1.0 | awk -F\_ '{print $2}'
0.1.0
0 голосов
/ 25 апреля 2019

Учитывая, что ваш Input_file будет таким же, как показанные образцы.

echo "$var" | awk -F'_' '{print $2}'

ИЛИ может использовать sub:

echo "$var" | awk '{sub(/.*_/,"")} 1'

С простымbash вы можете использовать:

echo "${var#*_}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...