
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 grep
das 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, f
sobald 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 Version
in den Zeilen kommt, in denen Version
das 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}'