Encontre nomes de repositórios a partir da saída de informações do gitolite

3

Como eu extraio os nomes da saída do comando gitolite info , para canalizar mais em um script?

Estou escrevendo um script de migração para migrar todos os meus repositórios do gitolite para um servidor Gitlab. Assim, eu quero pegar todos os nomes de repositórios do gitolite e usá-los no Gitlab. Abaixo está a saída de exemplo que estou tentando comparar.

hello sitaram, this is gitolite v2.1-29-g5a125fa running on git 1.7.4.4
the gitolite config gives you the following access:
     R      SecureBrowse
     R   W  anu-wsd
     R   W  entrans
    @R   W  git-notes
    @R   W  gitolite
     R   W  gitolite-admin
     R   W  indic_web_input
 @C  R   W  private/sitaram/[\w.-]+
     R   W  proxy
 @C @R   W  public/sitaram/[\w.-]+
    @R_ @W_ testing
     R   W  vic

Isso deve produzir:

SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vkc

Atualmente, estou tentando colocar isso em um script de shell, para que seja útil para outras pessoas. Minha abordagem atual é um comando grep , que se parece com o seguinte:

grep -Eio "([A-Za-z0-9_-]+)$" gitolite-info-output

No entanto, isso também captura o 4 no final da primeira linha. Eu tenho tentado várias abordagens, mas não consigo excluir isso adequadamente, sem incluir ou excluir outras coisas.

Fazendo isso OS X 10.10.3 .

    
por SpacyRicochet 19.04.2015 / 15:55

1 resposta

3

Com base na entrada que você mostra na sua pergunta, isso deve funcionar:

$ grep -oP '^[ @]*R.* \K.*' gitolite-info-output
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic

Isso está usando a opção -P do GNU grep para ativar as Expressões Regulares Compatíveis com Perl que nos fornecem \K : "Excluir qualquer coisa que tenha sido correspondida até este ponto". Combinado com -o , podemos procurar linhas começando com 0 ou mais espaços ou @ ( ^[ @]* ), então R , depois 0 ou mais caracteres até outro espaço. Tudo isso é descartado por causa do \K , então somente a última palavra é impressa.

Se você não tem o GNU grep (no OSX, por exemplo), você pode fazer algo assim:

$ grep -E '^[ @]*R' gitolite-info-output | awk '{print $NF}'
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic

Ou faça tudo em awk :

$ awk '/^[ @]*R/{print $NF}' gitolite-info-output 
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic

Ou Perl:

$ perl -nle '/^[ @]*R.*\s(.*)/ && print $1' gitolite-info-output 
SecureBrowse
anu-wsd
entrans
git-notes
gitolite
gitolite-admin
indic_web_input
proxy
testing
vic
    
por 19.04.2015 / 16:03