Eu sei que isso não está usando sed, mas com base na sua saída, isso é mais fácil.
svnversion --version | head -1 | awk '{print $3}'
Se você tem perl disponível ...
svnversion --version | perl -lne 'print $1 if /version (\d+.\d+.\d+)/'
Gostaria de usar o sed para extrair o número da versão do comando:
svnversion --version
O que dá saída como:
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/).
E depois de processar com sed, eu gostaria apenas de:
1.6.2
Até agora, eu tenho essa monstruosidade (devido à minha ignorância):
svnversion --version | sed s/[\wa-zA-Z//\(\):,]*//g | sed 's/[ ]//' | sed 's/[ ]//' | sed 's/[ ][0-9 ./n/-]*//'
Tenho certeza de que existe uma solução simples e elegante que um especialista pode fornecer facilmente.
Tente isto:
svnversion --version | sed -n '/version/ s/.*version \([0-9]\+\.[0-9]\+\.[0-9]\+\) .*//p'
Diz:
-n
--- Não imprima automaticamente a saída.
/version/
--- Nas linhas que incluem a string "version",
s/
- substitui o que é
.*version
e .*
--- entre [uma sequência de zero ou mais de qualquer caractere, a string "version", um espaço] e [um espaço, uma sequência de zero ou mais de qualquer personagem],
\(...\)
--- capturando
[0-9]\+
--- uma sequência de um ou mais dígitos
\.
--- seguido por um período literal
//
--- o que foi capturado no primeiro (e só neste caso) conjunto de parênteses
p
--- e imprima-o explicitamente.
Como a impressão automática é suprimida e somente a linha que inclui "versão" é selecionada, as outras linhas são ignoradas.
Mais uma maneira de fazê-lo sem o uso de:
svnversion --version | head -1 | cut -d" " -f3
Tags version-control sed version