sed Извлекает номер версии из строки (только версия, без других номеров) - PullRequest
3 голосов
/ 22 сентября 2011

Я хочу добиться того же, что описано в sed: Извлечь номер версии из строки , но, принимая во внимание только первую последовательность чисел или даже безопаснее, сказать sed, чтобы оставалась только последовательность чисел название команды, оставляя без остатка.

I have: Хром 12.0.742.112 Ubuntu 11.04

I want: 12.0.742.112

Instead of: 12.0.742.11211.04

Теперь я знаю, что используя голову или хвост с сортировкой, можно отобразить наибольшее / наименьшее число, но как я могу сказать sed, чтобы он рассматривал только первую последовательность?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я использую Bash.

Ответы [ 5 ]

14 голосов
/ 23 сентября 2011

Первый номер? Как насчет:

sed 's/[^0-9.]*\([0-9.]*\).*/\1/'
4 голосов
/ 23 сентября 2011

Вот решение, которое не зависит от положения команды в вашей строке, но оно подхватит все, что будет после него:

command="Chromium"

string1="Chromium 12.0.742.112 Ubuntu 11.04"
string2="Ubuntu 11.04 Chromium 12.0.742.112"

echo ${string1} | sed "s/.*${command} \([^ ]*\).*$/\1/"
echo ${string2} | sed "s/.*${command} \([^ ]*\).*$/\1/"
1 голос
/ 23 сентября 2011

хорошо, если вы используете bash и если то, что вы хотите, всегда находится во 2-м поле,

$ string="Chromium 12.0.742.112 Ubuntu 11.04"
$ set -- $string; echo $2
12.0.742.112
1 голос
/ 22 сентября 2011

С cut (при условии, что вам всегда нужен второй бит информации в строке):

$ echo "Chromium 12.0.742.112 Ubuntu 11.04" | cut -d' ' -f2
12.0.742.112
0 голосов
/ 22 сентября 2011

Следующая команда perl делает это:

echo "Chromium 12.0.742.112 Ubuntu 11.04" | perl -ne '/[\d\.]+/ && print $&'
...