![Bash를 사용하여 패키지 이름의 버전 부분만 추출](https://linux55.com/image/103585/Bash%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%A8%ED%82%A4%EC%A7%80%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%EB%B2%84%EC%A0%84%20%EB%B6%80%EB%B6%84%EB%A7%8C%20%EC%B6%94%EC%B6%9C.png)
패키지 이름에서 패키지 버전만 추출하고 싶습니다. 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