
Tengo un script que proporciona el siguiente resultado:
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
--------------------------------------------------------------------------------
Necesito obtener la versión en todos los tipos de sistemas operativos como Aix, Linux y Solaris.
Con el siguiente comando obtengo el resultado deseado:
sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | grep -A 1 WebSphere | tail -n 1 | awk '{print $NF}'
Salida: 8.5.5.10
Sin embargo, cuando la salida del script cambia ligeramente, como se muestra a continuación, el mismo comando no me proporciona la versión.
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
--------------------------------------------------------------------------------
Producción:
--------------------------------------------------------------------
Sin embargo, el resultado deseado es:
7.0.0.19
Espero que el mismo comando proporcione el número de versión para los resultados anteriores.
Nota: Supongo que si podemos buscar la línea debajo de la línea que comienza con "Name"
seguida de <whitespaces>
y luego seguida de "IBM HTTP Server"
, obtendremos la versión. Sin embargo, no consigo conseguir grep
que me salga el resultado deseado.
¿Puedes sugerirme?
Respuesta1
Sugeriría una awk
solución basada en -si esa herramienta está disponible para usted:
awk '/^Installed Product/{f=1} f && $1=="Version" {print $2; f=0}'
establecerá una bandera f
una vez que se encuentre el encabezado "Producto instalado" y (solo) luego buscará una línea que comience con "Versión". Imprimirá el segundo de los campos separados por espacios en blanco de esa línea, que es la versión. Como medida de seguridad, al mismo tiempo restablecerá el indicador para garantizar que la aparición posterior de una línea "Versión" no genere una salida falsa.
Puedes usarlo como
sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | awk '/^Installed Product/{f=1} f && $1=="Version" {print $2; f=0}'
Respuesta2
Según la entrada de su ejemplo, simplemente está buscando el tramo de números .
que viene después de la palabra Version
en las líneas, donde Version
está la primera palabra de la línea y donde va seguida de un espacio en blanco y luego un número. Si tienes GNU grep
, simplemente puedes hacer:
sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | grep -oP '^Version\s+\K\d.*'
Si no tienes GNU grep
, puedes usar:
sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | sed -n 's/^Version[ \t]*\([0-9]\)/\1/p'
O, quizás de manera más legible:
sh /ihs/IBM/HTTPServer/bin/versionInfo.sh |
awk '/^Version *[0-9]/{print $2}'