Чи є інструмент аналізу імен, який є частиною офіційного пакету інструментів RPM?
У мене є список імен. Кожен - це ім'я пакету RPM. У мене немає справжніх пакунків, лише імена файлів. Для кожного мені потрібно витягнути назву пакета та версію ($ NAME та $ VERSION). Причина мені потрібна в тому, що я пишу сценарій, який потім гарантує, що "yum install $ VERSION" встановлює $ VERSION. Це частина системи, яка створює пакети та перевіряє їх правильність завантаження.
Список імен файлів виглядає так:
$ cat /tmp/packages.txt
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-el-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-hgk-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/python-redis-2.8.0-2.el6.noarch.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/redis-2.6.16-1.el6.1.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
Я знайшов такий код, який є функцією BASH, яка виконує завдання:
function parse_rpm() { RPM=$1;B=${RPM##*/};B=${B%.rpm};A=${B##*.};B=${B%.*};R=${B##*-};B=${B%-*};V=${B##*-};B=${B%-*};N=$B;echo "$N $V $R $A"; }
for i in $(</tmp/packages.txt) ; do
parse_rpm $i
done
Це працює. Переважно. Є деякі винятки:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Зауважте, що версію не отримано правильно (вона повинна бути 1,0-99)
Мені цікаво (1), чи є в пакеті rpmdev інструмент, який робить це правильно. (2) Якщо ні, чи існує офіційний регулярний вираз. (3) Який епітонний еквівалент цього регулярного виразу?
Спасибі заздалегідь!