Resmi RPM araç paketinin bir parçası olan bir ad ayrıştırma aracı var mı?
Bir dosya adları listem var. Her biri bir RPM paketinin dosya adıdır. Gerçek paketlerim yok, sadece dosya isimleri. Her biri için paket adını ve sürümünü ($ NAME ve $ VERSION) ayıklamam gerekiyor. Bu ihtiyacım nedeni ben daha sonra "yum install $ VERSION" $ VERSION yükler emin olun bir komut dosyası yazıyorum. Bu, paketleri oluşturan ve düzgün şekilde yüklendiğini doğrulayan bir sistemin parçasıdır.
Dosya adları listesi şuna benzer:
$ 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
Ben görevi yapan bir BASH işlevi olan aşağıdaki kodu buldum :
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
İşe yarıyor. Çoğunlukla. Bazı istisnalar vardır:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Sürümü doğru şekilde almadığına dikkat edin (1.0-99 olmalıdır)
(1) rpmdev paketinde bunu doğru yapan bir araç olup olmadığını merak ediyorum. (2) Değilse, kullanabileceğim resmi bir regex var mı? (3) Bu normal ifadenin python eşdeğeri nedir?
Şimdiden teşekkürler!