出力からバージョンを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}'

「インストールされた製品」ヘッダーが見つかるとフラグを設定しf、その後「バージョン」で始まる行を探します。その行の空白で区切られたフィールドの 2 番目、つまりバージョンを出力します。安全対策として、同時にフラグをリセットして、後で「バージョン」行が出現しても誤った出力が生成されないようにします。

次のように使用できます

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

関連情報