มีเครื่องมือวิเคราะห์ชื่อที่เป็นส่วนหนึ่งของชุดเครื่องมือ 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) ถ้าไม่มีจะมี regex อย่างเป็นทางการที่ฉันสามารถใช้ได้ (3) python ที่เทียบเท่ากับ regex นั้นคืออะไร
ขอบคุณล่วงหน้า!