Eu tenho o comando git svn assim:
git svn log --limit=1 --oneline
Ele será impresso on-line assim:
r12345 | <anything, as it is svn comment inputted by svn-user>
Estou tentando canalizar o comando sed para obter o 12345
único, no entanto, não consigo fazê-lo funcionar. Existem muitos erros e o atual éparenthesis not balanced
meu último comando foi o seguinte:
git svn log --limit=1 --oneline | sed -e 's/r\(0-9) |*/\1/'
Eu pesquisei no Google e a documentação do sed não é muito clara ... Não sou muito boa com regex e minha melhor experiência é com o git --grep
que é regex simplificado com boa documentação.
O ambiente é o terminal MacOSX, se for o caso.
EDITAR:
sed -n 's/r\(0-9*\)/\1/
funciona, mas retorna uma string vazia.
Você está quase lá
Você precisa dizer ao sed o que você quer
\([0-9]*\)
e o que não quer /r
&.*/
fonte
[0-9]*
é ganancioso, então eu não acho que o espaço no meio faça alguma coisa útil.r
e espaço), para que possa acelerar um pouco, dependendo de um solucionador, é claro.Sinto que
sed
nem sequer é a melhor ferramenta aqui, já que isso é para modificar a linha, mas vejo isso mais como um problema de extração. Para qual regex com grupos é um caminho bastante razoável. Por qualquer motivo,grep
não há como extrair grupos, o que acho estranho. Felizmentepcregrep
faz.Irá corresponder ao padrão "r" seguido por alguns números, apenas no início da linha (é o que
^
acontece - caso contrário, você poderá extrair várias correspondências se a mensagem de confirmação se referir a outro commit). O-o1
é extrair o 1º grupo. Exemplo:Por que usar isso em vez de
sed
? Puramente por simplicidade. Você só precisa extrair algo, para poder usar regex puro. Eu vejo isso como muito mais simples que ased
resposta.fonte
sed
. Tome este formato comumente vistosed -n '/foo/p'
(age exatamente comogrep foo
). Oused 10q
(o mesmo quehead -10
) Confira sed.sourceforge.net/sed1line.txt para muitos outros exemplos.fonte