
아래 출력을 제공하는 스크립트가 있습니다.
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가 있다면 간단히 다음과 같이 할 수 있습니다:Version
Version
grep
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}'