Como posso substituir o caractere de espaço no nome das ramificações de despejo SVN?

2

Gostaria de substituir os caracteres de espaço ( ) no nome dos ramos por um sublinhado ( _ ). Por exemplo, digamos que eu tenha um arquivo sedtest contendo:

Node-path: trunk/
Node-path: trunk/src/lib 0
Node-path: trunk/src/lib 0/bla.txt
Node-path: branches/ branch0-blabla_blabla/src
Node-path: branches/ branch0-blabla_blabla
Node-path: branches/branch1 stuffthing
Node-path: branches/branch1 stuffthing/src/lib 0
Node-path: branches/branch1 stuffthing/src/lib 0/bla.txt
Node-path: branches/branch2stuffthing/src/lib 0/bl a.txt

Eu gostaria que fosse modificado assim:

Node-path: trunk/
Node-path: trunk/src/lib 0
Node-path: trunk/src/lib 0/bla.txt
Node-path: branches/_branch0-blabla_blabla/src
Node-path: branches/_branch0-blabla_blabla
Node-path: branches/branch1_stuffthing
Node-path: branches/branch1_stuffthing/src/lib 0
Node-path: branches/branch1_stuffthing/src/lib 0/bla.txt
Node-path: branches/branch2stuffthing/src/lib 0/bl a.txt

Estou tendo um problema semelhante ao descrito em esta pergunta SO . No entanto, essa pergunta solicita a substituição de todos os espaços no caminho. Gostaria de substituir os espaços apenas nos nomes dos ramos.

A partir dessa outra questão, modifiquei o comando sed para:

sed '/^Node-path: branches\//s/ /_/2' < sedtest

Mas também modifica a última linha para Node-path: branches/branch2stuffthing/src/lib_0/bl a.txt , que deve permanecer intocada. Minha experiência com sed sendo bastante limitada, não consegui limitar adequadamente a "região de pesquisa" ao que está entre branches/ e as seguintes / ou $ , o que ocorrer primeiro. Estou usando o CentOS 7.

Quanto ao que estou tentando realizar: Estou tentando transportar nosso repositório SVN para um git one e, de acordo com esta resposta em SO e na minha experiência pessoal, nomes de ramos git não podem ter espaços neles. Eu estou tentando consertar isso através de um despejo svn como sugerido em svnbook.red-bean.com .

Eu suponho que eu poderia grep todos os ramos defeituosos e substituir manualmente as seqüências de caracteres, mas isso seria menos genérico, mais trabalho e muito menos divertido .

    
por Alexandre Vaillancourt 20.07.2018 / 18:56

3 respostas

1

Eu construí o seguinte comando sed :

$ sed '/^Node-path: branches\//s/Node-path: branches\/\([-A-Za-z0-9]*\) \
   \([-A-Za-z0-9]*\)/Node-path: branches\/_/' < sedtest

Parece grande e feio, mas funciona para essa situação.

Observe que ele não corrige várias ocorrências do espaço no nome da ramificação, apenas uma (portanto, executarei novamente o comando se precisar).

Como observação, se você estiver fazendo isso para corrigir um despejo SVN, não se esqueça de corrigir as linhas Node-copyfrom-path: da mesma maneira.

    
por 20.07.2018 / 20:08
0
 sed '/^Node-path: branches\/ /s/ /_/2' < sedtest

veja o espaço entre as duas barras depois das ramificações

    
por 20.07.2018 / 19:11
0

Perl lookbehind torna isso um pouco mais simples, embora eu não reivindicasse muito:

perl -ple 's:^Node-path: branches/\K([^ /]*) :$1_:' <file

ou talvez awk, que pode manipular mais de um espaço no branchname mudando para gsub:

awk -F/ -vOFS=/ '$1=="Node-path: branches"{sub(/ /,"_",$2)} 1' <file
    
por 23.07.2018 / 18:42

Tags