Czy istnieje narzędzie do analizy nazw, które jest częścią oficjalnego pakietu narzędzi RPM?
Mam listę nazw plików. Każda to nazwa pliku pakietu RPM. Nie mam rzeczywistych pakietów, tylko nazwy plików. Dla każdego muszę wyodrębnić nazwę i wersję pakietu ($ NAME i $ VERSION). Potrzebuję tego, dlatego, że piszę skrypt, który następnie upewnia się, że „yum install $ VERSION” instaluje $ VERSION. Jest to część systemu, który buduje pakiety i sprawdza, czy zostały poprawnie przesłane.
Lista nazw plików wygląda następująco:
$ 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
Znalazłem następujący kod, który jest funkcją BASH wykonującą zadanie:
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
To działa. Przeważnie. Istnieją pewne wyjątki:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Zauważ, że wersja nie otrzymała poprawnie (powinna być 1.0-99)
Zastanawiam się (1), czy w pakiecie rpmdev znajduje się narzędzie, które robi to poprawnie. (2) Jeśli nie, czy istnieje oficjalne wyrażenie, którego mógłbym użyć. (3) Jaki jest odpowiednik tego wyrażenia regularnego w Pythonie?
Z góry dziękuję!