無法從輸出中 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)上的版本

透過以下命令,我得到了所需的輸出:

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」開頭的行。它將列印該行的第二個以空格分隔的字段,即版本。作為安全措施,它會同時重置標誌,以確保以後出現的「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}' 

相關內容