vim, reformatar o texto para programação

3

Eu tenho um arquivo grande com linhas parecidas com

2 No route to specified transit network

3 No route to destination

E eu gostaria de transformar isso para uso em uma linguagem de programação para

{2,"No route to specified transit network"},

{3,"No route to destination"},

Como eu faria isso?

    
por nos 02.09.2009 / 11:28

4 respostas

8

A conversão básica é

sed 's|^\([0-9]\)\(.*\)|{,""}|g' file.txt > file2.txt

em vim ,

:%s/\([0-9] \(.*\)/{,""}/g

Isso cobrirá as linhas que começam com o formato

N text on the line...

Onde N é um número de dígito único.
Pode ser estendido ainda por outras formas.

    
por 02.09.2009 / 11:37
4

No seu caso, uma simples expressão regular é suficiente (e a melhor solução). No entanto, em outros casos, a gravação de uma macro pode ser melhor.

Há um exemplo de macro simples na documentação do vim, seção 12.1 , e descrição adicional em :help q

Em poucas palavras:

  1. Digite q seguido por uma letra (a letra é register onde a macro será gravada).
  2. Faça alguns comandos, modifique seu texto conforme necessário, use todo o poder do Vim.
  3. Mova o cursor para a próxima linha.
  4. Pressione q para interromper a gravação.

Para reproduzir uma macro, pressione @ seguido pela letra em que a macro foi gravada. Para reproduzir a última macro, pressione @@ . Digite um número antes de reproduzir uma macro para repeti-lo quantas vezes forem necessárias.

Então, no seu caso, para transformar as linhas assim:

2 No route to specified transit network
{2, "No route to specified transit network"},
  1. Posicione o cursor em uma das linhas.
  2. Pressione qa (a escolha do registro a foi arbitrária).
  3. Pressione exatamente isso (incluindo aspas e espaços) I{<esc>f cl, "<esc>A"},<esc>j
  4. Pressione q para interromper a gravação.
  5. Pressione 100@a e fique feliz assistindo a macro sendo reproduzida. : -)

Deixarei ao leitor a explicação de cada comando do passo 3.; -)

Naturalmente, esta não é a única solução. Você poderia ter feito o passo 3 de muitas maneiras diferentes.

    
por 11.09.2009 / 03:40
1

Esse comando vim faz o que você quer?

%s/^\(.\)\ \(.*\)$/{,\ ""},/g
    
por 02.09.2009 / 11:37
1
:%s/^\s*\(\d\+\)\s\+\(\S.\{-}\)\s*$/{, ""}/
    
por 02.09.2009 / 11:47

Tags