Число извлечения от строки

При использовании этой команды человечности:

${HOME}/temp/.git describe --always --tags HEAD 

вывод этой команды:

v0.1.5-2-p343h3d3

Я хочу извлечь 1.5 от вывода выше и проверки, если это больше, чем 1,5 или нет.
Есть ли любое решение для этого.?

4
задан 16 March 2015 в 11:59

3 ответа

Вы могли сделать что-то как

${HOME}/temp/.git describe --always --tags HEAD  | awk ' {
                             match ($0, /[0-9]+\.[0-9]+\.[0-9]+/,m)
                             if(m[0]>"0.1.5"){ 
                                 print("hello")
                              }
                             }'

Это проверит первое соответствие regex результат. Просто бросив другой способ сделать это, хотя я не уверен, сколько из практического пути это для Вас.

Удачи

3
ответ дан 1 December 2019 в 09:00

Номера версий на самом деле довольно жестки для сравнения, учитывая, что они часто - не стандартные математические сравнения (у этого, например, есть две десятичных точки, который составляет bc бросок).

Поэтому я обращаюсь к менее известной опции в sort, который может привыкнуть к строкам версии вида. Рассмотрите следующее:

$ echo -e "v0.1.5\nv0.1.6-2-p343h3d3" | sort -V
v0.1.5
v0.1.6-2-p343h3d3

oli@bert:~$ echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V
v0.1.4-2-p343h3d3
v0.1.5

Это в основном означает, что мы можем отсортировать версии, таким образом, последнее находится на последней строке. Все, что мы должны сделать тогда, является сравнением строк против последней строки, в if, или shortcutted-если:

[[ $(echo -e "v0.1.5\nv0.1.4-2-p343h3d3" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER

Игра вокруг с эти v0.1.4-2-p343h3d3 строка. Если Вы засунете его [до 118], то это отзовется эхом.

Теперь для приведения этот всего в чувство назад к команде:

[[ $(echo -e "v0.1.5\n$(${HOME}/temp/.git describe --always --tags HEAD)" | sort -V | tail -1) != "v0.1.5" ]] && echo NEWER

Или Вы могли сломать его для удобочитаемости:

THRESHOLD="v0.1.5"
VERSION=$(${HOME}/temp/.git describe --always --tags HEAD)
if [[ $(echo -e "$THRESHOLD\n$VERSION" | sort -V | tail -1) != "$THRESHOLD"  ]]; then
    echo GREATER
fi
5
ответ дан 1 December 2019 в 09:00

Вы могли использовать следующую команду для exit с 0 состояние, если извлеченная версия больше, чем 1,5

${HOME}/temp/.git describe --always --tags HEAD | perl -ne '/v\d+\.(\d+\.\d+)/;exit(1) if $1 <= 1.5'
2
ответ дан 1 December 2019 в 09:00

Другие вопросы по тегам:

Похожие вопросы: