Я знаю, что это не использует sed, но на основе ваших выводов это проще.
svnversion --version | head -1 | awk ''
Если у вас есть Perl ...
svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'
Я хотел бы использовать 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 ''
Если у вас есть Perl ...
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
--- и явно распечатать его.Поскольку автоматическая печать подавляется, и выбирается только строка, содержащая «версию», остальные строки игнорируются.
Еще один способ сделать это без sed: svnversion --version | head -1 | cut -d" " -f3