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