공식 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 여야 함)
rpmdev 패키지 에이 작업을 올바르게 수행하는 도구가 있는지 궁금합니다. (2) 그렇지 않으면 공식 정규식이 있습니까? (3) 그 정규 표현식과 파이썬은 무엇입니까?
미리 감사드립니다!