Es konnte nicht nach der Version aus der Ausgabe gesucht werden.

Es konnte nicht nach der Version aus der Ausgabe gesucht werden.

Ich habe ein Skript, das die folgende Ausgabe liefert:

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

Ich muss die Version für alle Betriebssysteme wie Aix, Linux und Solaris erhalten.

Mit dem folgenden Befehl erhalte ich die gewünschte Ausgabe:

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | grep -A 1 WebSphere | tail -n 1 | awk '{print $NF}'

Ausgabe: 8.5.5.10

Wenn sich die Skriptausgabe jedoch leicht ändert, wie unten, erhalte ich mit demselben Befehl nicht die Version.

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

Ausgabe:

--------------------------------------------------------------------

Die gewünschte Ausgabe ist jedoch:

7.0.0.19

Ich erwarte, dass derselbe Befehl die Versionsnummer für beide oben genannten Ausgaben angibt.

Hinweis: Ich schätze, wenn wir nach der Zeile unterhalb der Zeile suchen können, die mit beginnt, "Name"gefolgt von <whitespaces>und dann gefolgt von, "IBM HTTP Server"dann erhalten wir die Version. Ich kann jedoch nicht grepdas gewünschte Ergebnis erzielen.

Können Sie bitte einen Vorschlag machen?

Antwort1

Ich würde eine awk-basierte Lösung vorschlagen, wenn Ihnen dieses Tool zur Verfügung steht:

awk '/^Installed Product/{f=1} f && $1=="Version" {print $2; f=0}'

setzt ein Flag, fsobald der Header „Installiertes Produkt“ gefunden wurde, und sucht (erst) dann nach einer Zeile, die mit „Version“ beginnt. Es wird das zweite der durch Leerzeichen getrennten Felder dieser Zeile gedruckt, also die Version. Als Sicherheitsmaßnahme wird gleichzeitig das Flag zurückgesetzt, um sicherzustellen, dass kein späteres Vorkommen einer „Version“-Zeile zu einer falschen Ausgabe führt.

Sie können es verwenden als

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | awk '/^Installed Product/{f=1} f && $1=="Version" {print $2; f=0}'

Antwort2

Basierend auf Ihrer Beispieleingabe suchen Sie einfach nach der Zahlenfolge, .die nach dem Wort Versionin den Zeilen kommt, in denen Versiondas erste Wort der Zeile steht und auf das ein Leerzeichen und dann eine Zahl folgt. Wenn Sie GNU haben grep, können Sie einfach Folgendes tun:

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | grep -oP '^Version\s+\K\d.*'

Wenn Sie GNU nicht haben grep, können Sie Folgendes verwenden:

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | sed -n 's/^Version[ \t]*\([0-9]\)/\1/p'

Oder vielleicht leserlicher:

sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | 
    awk '/^Version  *[0-9]/{print $2}' 

verwandte Informationen