次の出力を提供するスクリプトがあります。
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
「バージョン」で始まる行のみが検索されます。バージョンである行の2番目のスペースで区切られたフィールドを印刷します。安全対策としてフラグをリセットして、将来の「バージョン」行で誤った出力が生成されないようにします。
次のように使用できます。
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}'