패키지 이름에서 패키지 버전만 추출하고 싶습니다. var
패키지 이름(예: : )이 포함된 변수가 있다고 가정해 보겠습니다 var="nfs-utils-1.2.6-6.fc17.i686.rpm"
. 추출된 문자열은 입니다 1.2.6-6
. 구문 분석에 사용되는 방법은 모든 방법(regex, awk, cut)이 될 수 있습니다.
편집: 위의 예에서 실제로 추출하고 싶습니다1.2.6
답변1
이는 이식성이 좋지 않지만 이 특정 경우에는 다음과 같이 grep
작동합니다.
echo $var | egrep -o '[0-9].*-[0-9]'
1.2.6-6
답변2
트리거가 말했듯이,만약에이러한 패키지가 설치된 동일한 시스템에서 값을 추출하려면 RPM에 직접 버전을 요청할 수 있습니다.
ver=$(rpm --queryformat="%{VERSION}" -q nfs-utils)
답변3
마지막 2개의 "-" 문자가 버전을 둘러쌉니다.
따라서 "$"를 사용하여 문자열 끝에 고정된 *RE를 작성할 수 있습니다.
예를 들어
$ echo nfs-utils-1.2.6-6.fc17.i686.rpm | sed -e 's,.*-\([^-]*\)-[^-]*$,\1,'
1.2.6