Bash를 사용하여 패키지 이름의 버전 부분만 추출

Bash를 사용하여 패키지 이름의 버전 부분만 추출

패키지 이름에서 패키지 버전만 추출하고 싶습니다. 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

관련 정보