
У меня есть скрипт, который выдает следующий результат:
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}'
установит флаг, f
как только будет найден заголовок "Installed Product", и (только) затем будет искать строку, начинающуюся с "Version". Он выведет второе из разделенных пробелами полей этой строки, которое является версией. В качестве меры безопасности он одновременно сбросит флаг, чтобы гарантировать, что последующее появление строки "Version" не приведет к генерации ложного вывода.
Вы можете использовать его как
sh /ihs/IBM/HTTPServer/bin/versionInfo.sh | awk '/^Installed Product/{f=1} f && $1=="Version" {print $2; f=0}'
решение2
Исходя из вашего примера ввода, вы просто ищете отрезок чисел, .
который следует за словом Version
в строках, где Version
есть первое слово строки, за которым следует пробел и затем число. Если у вас есть GNU grep
, вы можете просто сделать:
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}'