SED: como retirar a string da versão

2

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.

    
por WilliamKF 08.12.2009 / 04:25

3 respostas

5

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+)/'
    
por 08.12.2009 / 04:34
4

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
  • então mais dígitos e pontos,
  • // --- 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.

    
por 08.12.2009 / 08:08
1

Mais uma maneira de fazê-lo sem o uso de: svnversion --version | head -1 | cut -d" " -f3

    
por 09.12.2009 / 22:26