2

Я хотел бы использовать 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 ответа3

5

Я знаю, что это не использует sed, но на основе ваших выводов это проще.

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

Если у вас есть Perl ...

svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'
4

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

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

Это говорит:

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

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

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .