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


3

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

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

Ответы:


6

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

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

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

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

Да: командные строки UNIX все об использовании правильного инструмента для работы.
Шеннон Нельсон

4

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

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

Это говорит:

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.