출력에서 버전을 찾기 위해 grep할 수 없습니다.

출력에서 버전을 찾기 위해 grep할 수 없습니다.

다음 출력을 제공하는 스크립트가 있습니다.

WVER0010I: Copyright (c) IBM Corporation 2002, 2012; All rights reserved.
WVER0012I: VersionInfo reporter version 1.15.1.48, dated 2/8/12

--------------------------------------------------------------------------------
IBM WebSphere Product Installation Status Report
--------------------------------------------------------------------------------

Report at date and time September 23, 2020 2:00:11 PM IST

Installation
--------------------------------------------------------------------------------
Product Directory        /ihs/IBM/HTTPServer
Version Directory        /ihs/IBM/HTTPServer/properties/version
DTD Directory            /ihs/IBM/HTTPServer/properties/version/dtd
Log Directory            /var/ibm/InstallationManager/logs

Product List
--------------------------------------------------------------------------------
IHS                      installed

Installed Product
--------------------------------------------------------------------------------
Name                  IBM HTTP Server for WebSphere Application Server
Version               8.5.5.10
ID                    IHS
Build Level           cf101629.01
Build Date            7/21/16
Package               com.ibm.websphere.IHS.v85_8.5.5010.20160721_0036
Architecture          x86-64 (64 bit)
Installed Features    IBM HTTP Server 64-bit with Java, Version 6
                      Core runtime

--------------------------------------------------------------------------------
End Installation Status Report
--------------------------------------------------------------------------------

Aix, Linux, Solaris 등 다양한 운영 체제의 버전을 구해야 합니다.

다음 명령을 사용하여 원하는 출력을 얻었습니다.

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | grep -A 1 WebSphere | tail -n 1 | awk '{print $NF}'

출력: 8.5.5.10

그러나 스크립트 출력이 약간 변경되면(아래 표시된 대로) 동일한 명령으로 버전을 가져오지 못합니다.

WVER0010I: Copyright (c) IBM Corporation 2002, 2005, 2008; All rights reserved.
WVER0012I: VersionInfo reporter version 1.15.5.1, dated 6/15/11

--------------------------------------------------------------------------------
IBM WebSphere Application Server Product Installation Status Report
--------------------------------------------------------------------------------

Report at date and time September 23, 2020 1:54:10 PM GMT+05:30

Installation
--------------------------------------------------------------------------------
Product Directory        /ihs/IBM/HTTPServer
Version Directory        /ihs/IBM/HTTPServer/properties/version
DTD Directory            /ihs/IBM/HTTPServer/properties/version/dtd
Log Directory            /ihs/IBM/HTTPServer/logs
Backup Directory         /ihs/IBM/HTTPServer/properties/version/nif/backup
TMP Directory            /tmp

Product List
--------------------------------------------------------------------------------
IHS                      installed

Installed Product
--------------------------------------------------------------------------------
Name                     IBM HTTP Server
Version                  7.0.0.19
ID                       IHS
Build Level              cf191132.09
Build Date               8/13/11
Architecture             Intel (32 bit)

--------------------------------------------------------------------------------
End Installation Status Report
--------------------------------------------------------------------------------

산출:

--------------------------------------------------------------------

그러나 원하는 출력은 다음과 같습니다.

7.0.0.19

나는 동일한 명령이 위의 두 출력 모두에 대한 버전 번호를 제공할 것으로 예상했습니다.

"Name"<whitespaces>참고: 뒤에 오는 줄 아래의 줄을 검색할 수 있다면 "IBM HTTP Server"버전을 얻을 수 있을 것이라고 생각했습니다 . 그러나 나는 grep내가 원하는 것을 얻을 수 없습니다.

뭔가 제안해주실 수 있나요?

답변1

awk도구에 액세스할 수 있는 경우 다음 기반 솔루션을 제안합니다.

awk '/^Installed Product/{f=1} f && $1=="Version" {print $2; f=0}'

"설치된 제품" 헤더가 발견되면 플래그가 설정되고 f"버전"으로 시작하는 행만 검색됩니다. 버전인 줄의 두 번째 공백으로 구분된 필드를 인쇄합니다. 안전 조치로서 플래그를 재설정하여 향후 "버전" 줄에서 잘못된 출력이 생성되지 않도록 합니다.

다음과 같이 사용할 수 있습니다.

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | awk '/^Installed Product/{f=1} f && $1=="Version" {print $2; f=0}'

답변2

예제 입력을 기반으로 줄의 단어 뒤에 오는 숫자 범위를 검색하면 됩니다. .여기서 줄의 첫 번째 단어는 공백, 숫자 순입니다. GNU가 있다면 간단히 다음과 같이 할 수 있습니다:VersionVersiongrep

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | grep -oP '^Version\s+\K\d.*'

GNU가 없으면 다음을 grep사용할 수 있습니다.

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | sed -n 's/^Version[ \t]*\([0-9]\)/\1/p'

또는 더 명확하게 설명하자면 다음과 같습니다.

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | 
    awk '/^Version  *[0-9]/{print $2}' 

관련 정보