Я хотел бы использовать 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/-]*//'
Я уверен, что существует простое изящное решение, которое эксперт может предоставить легко.
Я знаю, что это не использует sed, но основанный на Вашем выводе, это легче.
svnversion --version | head -1 | awk '{print $3}'
Если Вы имеете жемчуг в наличии...
svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'
Попробуйте это:
svnversion --version | sed -n '/version/ s/.*version \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*/\1/p'
Это говорит:
-n
---Автоматически не печатайте вывод./version/
---На строках, которые включают строку "версия",s/
- замена того, что.*version
и .*
---между [последовательность нуля или большего количества любого символа, строка "версия", пространство] и [пространство, последовательность нуля или большего количества любого символа],\(...\)
---получение[0-9]\+
---последовательность одной или нескольких цифр\.
---сопровождаемый литеральным периодом/\1/
---что было получено в первом (и только, в этом случае) набор круглых скобокp
---и явно распечатайте его.Поскольку автоматическая печать подавлена и только строка, которая включает "версию", выбран, другие строки проигнорированы.