No se puede buscar la versión desde la salida

No se puede buscar la versión desde la salida

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 grepque me salga el resultado deseado.

¿Puedes sugerirme?

Respuesta1

Sugeriría una awksolució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 funa 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 Versionen las líneas, donde Versionestá 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}' 

información relacionada