Apakah ada alat parsing nama yang merupakan bagian dari paket alat RPM resmi?
Saya memiliki daftar nama file. Masing-masing adalah nama file dari paket RPM. Saya tidak memiliki paket yang sebenarnya, hanya nama file. Untuk setiap saya perlu mengekstrak nama dan versi paket ($ NAME dan $ VERSION). Alasan saya membutuhkan ini adalah saya menulis skrip yang kemudian memastikan bahwa "yum install $ VERSION" menginstal $ VERSION. Ini adalah bagian dari sistem yang membuat paket dan memverifikasi mereka diunggah dengan benar.
Daftar nama file terlihat seperti:
$ 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
Saya menemukan kode berikut yang merupakan fungsi BASH yang melakukan tugas:
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
Berhasil. Kebanyakan. Ada beberapa pengecualian:
$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Perhatikan bahwa itu tidak mendapatkan versi dengan benar (seharusnya 1,0-99)
Saya bertanya-tanya (1) apakah ada alat dalam paket rpmdev yang melakukan ini dengan benar. (2) Jika tidak, apakah ada regex resmi yang bisa saya gunakan. (3) Berapakah python yang setara dengan regex itu?
Terima kasih sebelumnya!