Intereting Posts
Debian Linux – запускать скрипт / приложение при загрузке Расширение корневого раздела CentOS 6 С помощью fdisk cd в последний буквенно-цифровой каталог gnome-сессия работает на 100% CPU; .xsession-error растет без ограничений Есть ли мультиформатные зрители изображений, которые похожи на feh и могут показывать SVG-файлы? Перейти к следующему помеченному сообщению в Mutt Linux Mint 17.1 Cinnamon работает медленнее в компьютере, чем в Virtual Box Замена текста из списка замен. Добавлено осложнение: обратная косая черта xrandr не может открыть отображение при запуске X сеанса Разрешение разрешения CRON могу ли я использовать cd или использовать горячую директорию в командной строке в mc? URL с именем хоста не работает, но он работает с IP-адресом Должны ли мы позволить перезаписывать модули Python, установленные RPM? Как очистить ненужные файлы Насколько хорошо работает инопланетянин для конвертирования пакетов?

Извлечь только часть версии пакета с именем bash

Я хотел бы извлечь из имени пакета только версию пакета. Предполагая, что у меня есть переменная var , содержащая имя пакета (например: var="nfs-utils-1.2.6-6.fc17.i686.rpm" ). 1.2.6-6 строка будет 1.2.6-6 . Метод, используемый для анализа, может быть любым (regex, awk, cut).

Изменить: В приведенном выше примере мне бы хотелось получить 1.2.6

Это не очень портативно, но для этого конкретного случая этот grep работает:

 echo $var | egrep -o '[0-9].*-[0-9]' 1.2.6-6 

Как сказал thrig, если вы извлекаете значения в той же системе, где установлены эти пакеты, вы можете напрямую запросить RPM для версии:

 ver=$(rpm --queryformat="%{VERSION}" -q nfs-utils) 

Используя только силу bash, это лучшее, что я нашел до сих пор:

 varnums=$(echo ${var//[^0-9]/ }) var_version=${varnums// /.} echo $varversion 

Возврат будет таким:

 1.2.6.6.17.686 

Не так уж плохо, не так ли?

Завершают последние 2 '-' символы.

Таким образом, можно написать * RE, который привязан в конце строки с '$'

Например

 $ echo nfs-utils-1.2.6-6.fc17.i686.rpm | sed -e 's,.*-\([^-]*\)-[^-]*$,\1,' 

1.2.6