версия полосы с имени пакета с помощью Bash

Я пытаюсь разделить версию из имени пакета с помощью только Bash. У меня есть одно решение, но я не думаю, что это - лучшее доступное, таким образом, я хотел бы знать, существует ли лучший способ сделать это. лучше я имею в виду инструмент для очистки, легче понять.

предположите, что у меня есть строка "my-program-1.0", и я хочу только "мою-программу". мое текущее решение:

#!/bin/bash

PROGRAM_FULL="my-program-1.0"
INDEX_OF_LAST_CHARACTER=`awk '{print match($0, "[A-Za-z0-9]-[0-9]")} <<< $PROGRAM_FULL`
PROGRAM_NAME=`cut -c -$INDEX_OF_LAST_CHARACTER <<< $PROGRAM_FULL`

на самом деле "синтаксис" имени пакета является именем файла об/мин, если он имеет значение.

спасибо!

7
задан cd1 24 May 2010 в 17:44
поделиться

3 ответа

Довольно хорошо подходит для sed:

# Using your matching criterion (first hyphen with a number after it
PROGRAM_NAME=$(echo "$PROGRAM_FULL" | sed 's/-[0-9].*//')

# Using a stronger match
PROGRAM_NAME=$(echo "$PROGRAM_FULL" | sed 's/-[0-9]\+\(\.[0-9]\+\)*$//')

Второе соответствие гарантирует, что номер версии представляет собой последовательность чисел, разделенных точками (например, X, X.X.X, X.X.X, ...).

Edit: Итак, везде есть комментарии, основанные на том, что понятие номера версии не очень хорошо определено. Вам придется написать regex для ожидаемого ввода. Надеюсь, у вас не будет ничего такого ужасного, как "program-name-1.2.3-a". Однако, если у ОП нет дополнительных запросов, я думаю, что все ответы здесь достаточно хороши.

7
ответ дан 6 December 2019 в 23:01
поделиться

Bash:

program_full="my-program-1.0"
program_name=${program_full%-*}    # remove the last hyphen and everything after

Производит «my-program»

Или

program_full="alsa-lib-1.0.17-1.el5.i386.rpm"
program_name=${program_full%%-[0-9]*}    # remove the first hyphen followed by a digit and everything after

Производит «alsa-lib»

3
ответ дан 6 December 2019 в 23:01
поделиться

Как насчет:

$ echo my-program-1.0 | perl -pne 's/-[0-9]+(\.[0-9]+)+$//'
my-program
1
ответ дан 6 December 2019 в 23:01
поделиться
Другие вопросы по тегам:

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