SED: как вытащить строку версии

Я хотел бы использовать sed для вытаскивания номера версии из команды:

svnversion --version

Который дает вывод как:

svnversion, version 1.6.2 (r37639)
   compiled May 10 2009, 12:41:21

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

И после обработки с sed, я хотел бы просто:

1.6.2

До сих пор у меня есть это чудовище (из-за моего незнания):

svnversion --version | sed s/[\wa-zA-Z//\(\):,]*//g | sed 's/[ ]//' | sed 's/[ ]//' | sed 's/[ ][0-9 ./n/-]*//'

Я уверен, что существует простое изящное решение, которое эксперт может предоставить легко.

3
задан 17.04.2013, 16:11

3 ответа

Я знаю, что это не использует sed, но основанный на Вашем выводе, это легче.

svnversion --version | head -1 | awk '{print $3}'

Если Вы имеете жемчуг в наличии...

svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'
6
ответ дан 07.12.2019, 23:00

Попробуйте это:

svnversion --version | sed -n '/version/ s/.*version \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/p'

Это говорит:

  • -n ---Автоматически не печатайте вывод.
  • /version/ ---На строках, которые включают строку "версия",
  • s/ - замена того, что
  • .*version и .* ---между [последовательность нуля или большего количества любого символа, строка "версия", пространство] и [пространство, последовательность нуля или большего количества любого символа],
  • \(...\) ---получение
  • [0-9]\+ ---последовательность одной или нескольких цифр
  • \. ---сопровождаемый литеральным периодом
  • затем больше цифр и периоды,
  • /\1/ ---что было получено в первом (и только, в этом случае) набор круглых скобок
  • p ---и явно распечатайте его.

Поскольку автоматическая печать подавлена и только строка, которая включает "версию", выбран, другие строки проигнорированы.

4
ответ дан 07.12.2019, 23:00

Еще один способ сделать это w/o sed: svnversion --version | head -1 | cut -d" " -f3

1
ответ дан 07.12.2019, 23:00

Теги

Похожие вопросы