출력에서 버전을 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와 같은 모든 OS 버전을 구해야 합니다.

아래 명령을 사용하면 원하는 출력을 얻을 수 있습니다.

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}'

"Installed Product" 헤더가 발견되면 플래그를 설정 f한 다음 "Version"으로 시작하는 줄을 찾습니다. 해당 줄에서 공백으로 구분된 두 번째 필드, 즉 버전을 인쇄합니다. 안전 조치로서 동시에 플래그를 재설정하여 나중에 "버전" 라인이 발생하여 잘못된 출력이 생성되지 않도록 합니다.

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

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}' 

관련 정보