Как извлечь версию из единой командной строки в Linux? - PullRequest
1 голос
/ 05 октября 2011

У меня есть продукт, у которого есть команда с именем db2level, чей вывод указан ниже

enter image description here

Мне нужно извлечь из него 8.1.1.64, пока я пришел

db2level | grep "DB2 v" | awk '{print$5}'

, который дал мне вывод v8.1.1.64",

Пожалуйста, помогите мне получить 8.1.1.64.Спасибо

Ответы [ 8 ]

3 голосов
/ 05 октября 2011

grep достаточно для этого:

db2level| grep -oP '(?<="DB2 v)[\d.]+(?=", )'
3 голосов
/ 05 октября 2011

Только с awk:

db2level | awk -F '"' '$2 ~ /^DB2 v/ {print substr($2,6)}'
2 голосов
/ 05 октября 2011

Другое sed решение

db2level | sed -n -e '/v[0-9]/{s/.*DB2 v//;s/".*//;p}'

Это не зависит от числа в определенном формате, просто в определенном месте в выводе.

2 голосов
/ 05 октября 2011

Попробуйте grep с опцией -o:

db2level | grep -E -o "[0-9]+\.[0-9]+\.[0-9]\+[0-9]+"
2 голосов
/ 05 октября 2011

sed - ваш друг для общих задач извлечения:

db2level | sed -n -e 's/.*tokens are "DB2 v\([0-9.]*\)".*/\1/p'

Строка sed не выводит строки (-n), но те, где может произойти замена с данным регулярным выражением.. * В начале и конце строки обеспечивает соответствие всей строки.

2 голосов
/ 05 октября 2011
db2level | grep "DB2 v" | awk '{print$5}' | sed 's/[^0-9\.]//g'

удалить все, кроме цифр и точек

1 голос
/ 05 октября 2011
db2level | grep -o "v[0-9.]*" | tr -d v
1 голос
/ 05 октября 2011

Попробуйте s.th.как db2level | grep "DB2 v" | cut -d'"' -f2 | cut -d'v' -f2

cut разделяет вход по частям, разделяется разделителем -d и выводит номер поля -f

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...