문자열 일치 후 문자 하나만 가져오는 방법(rpm에서 RHEL 버전 확인)

문자열 일치 후 문자 하나만 가져오는 방법(rpm에서 RHEL 버전 확인)

호스팅 서버를 설정하고 구성하는 데 사용하는 오픈 소스 셸/bash 스크립트가 있고, cloudflare를 설치하기 위해 다음을 사용하여 RHEL 버전을 가져옵니다.이 명령:

RHEL_VERSION=$(rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release) );

문제는 마이너 버전이 존재하면 메이저 버전뿐만 아니라 해당 마이너 버전도 반환된다는 점이다. 위의 cmd를 사용하면 다음이 반환됩니다 7.2. 문제는 주 버전 번호만 필요하다는 것입니다.

나는 아마도 문자열의 일부를 얻기 위해 , 그런 다음 , 등 rpm -q --whatprovides redhat-release을 반환하는 것을 사용할 수 있을 것이라고 생각했습니다.cloudlinux-release-7.2-1.el7.x86_64sedawkel7

패키지 URL을 생성할 때 이 문자열을 사용하려면 다음이 필요합니다.

PACKAGE_URL="http://pkg.cloudflare.com/cloudflare-release-latest.el${RHEL_VERSION}.rpm"

답변1

주요 버전 구성 요소를 가로채려면 다음을 수행하세요.

... | grep -Eo '^[0-9]*'

-o이 확장 옵션은 grep일치하는 부분만 인쇄합니다. 여기서 첫 번째 숫자 앞에는 점 문자가 옵니다.

답변2

$ RHEL_VERSION=7.2-1.el6
$ echo "${RHEL_VERSION%%[!0-9]*}"
7
$ echo "${RHEL_VERSION%%-*}"
7.2
$ echo "${RHEL_VERSION##*.}"
el6
$ echo "${RHEL_VERSION##*[!0-9]}"
6

답변3

나는 아니에요회전 속도이 시스템에서는 할 수 있었지만 나는 이것을 할 수 있었습니다세게 때리다:

PROVIDED=cloudlinux-release-7.2-1.el7.x86_64
RHEL_VERSION=`echo $PROVIDED  | sed 's/^.*-release-\([0-9]\).*/\1/'  
echo $RHEL_VERSION 

" 7"을 출력합니다.

필요한 경우 -release-" "를 보다 적절한 정규식으로 바꿀 수 있습니다.

다음을 시도해 볼 수 있습니다.

echo $PROVIDED  |  sed -ne 's/^[^-]*-\([^-]*\)-.*$/\1/p'

release나에게는 " "이(가) 반환됩니다.[--버전: sed(GNU sed) 4.2.2].

답변4

상담을 받아보실 수도 있습니다이 훌륭한 답변운영 체제 이름(및 버전)을 안정적으로 결정하는 것과 관련됩니다. 해당 답변을 바탕으로 다음을 수행할 수 있습니다.

RHEL_VERSION="$(lsb_release -r | awk '{print $NF}')"

그런 다음 제공된 다른 답변을 사용하여 주요 버전 번호를 추출하십시오. 장점은 이 접근 방식이 RHEL보다 더 많은 배포판에서 작동한다는 것입니다.

버전 번호가 순전히 숫자(소수점으로 구분된 주요 번호와 부 번호)일 것이라고 확신하는 경우 모든 작업을 한 번에 수행할 수 있습니다.

RHEL_MAJOR_VERSION="$(lsb_release -r|awk '{printf "%d\n",$N}')"

관련 정보