como juntar diferentes linhas específicas de um arquivo dentro do vi

3

Estou procurando uma solução sobre um problema de "colar" no vi / vim.

Como ingressar em linhas específicas em um arquivo de texto? Eu tenho um arquivo como este:

15/10/2011 Revolution day
16/10/2011 About Rome
 - differents newspapers
  blogs an feeds
 :) hp
17/10/2011 Yep, another day

e eu quero colar todas as linhas que não começam com um número. Eu tentei algo assim, mas não funciona:

:[!^[0-9]]!paste -d ' ' -s
    
por gogolb 28.10.2011 / 15:05

5 respostas

3

:%s/\(.*\)\n\(^[^0-9]\)//g

Se você quiser um espaço ou algo assim, adicione-o entre \ 1 e \ 2.

    
por 28.10.2011 / 16:28
2

você pode fazer isso em duas etapas no VIM, se isso for aceitável:

Primeiro, junte todas as linhas em uma única linha.

com o arquivo aberto no VIM, emita o seguinte pressionamento de tecla: V G J

  • V = Modo Visual (linearmente, em vez de em caracteres ( v ))
  • G = destaque todas as linhas
  • J = Junte todas as linhas

Em segundo lugar, divida suas linhas no formato de data com o qual as linhas resultantes começam.

com o arquivo aberto no VIM, emita o seguinte comando:

:%s#\([0-9][0-9]/[0-9][0-9]/[0-9]\)#^M#g

Isso pesquisará a linha unificada por qualquer string que corresponda a NN / NN / N, onde N = 0-9, que corresponde ao formato de data com o qual suas linhas começam, e será dividida nessa correspondência.

    
por 28.10.2011 / 16:31
2

Use o v com join .

:v/^[0-9]/-1,join

Detalhado:

  • :v selecione qualquer linha que não corresponda à expressão regular
  • /^[0-9]/ de qualquer linha que comece com um dígito
  • -1, da linha anterior para a linha atual
  • join combina as linhas selecionadas, separadas por espaços em branco
por 20.12.2011 / 14:48
0

Eu estou falando sobre o vim, isso não será executado no vi. Esteja ciente disso.

E sobre

    :%v/^[^0-9]/d

para excluir todas as linhas no buffer, que começam com um número.

    ggVG

para realçar todas as linhas

    :w ! paste -d ' ' -s

e depois disso

    u

para voltar ao ponto de partida

    
por 28.10.2011 / 15:26
0

por favor tente:

:g/^\d/,/^\d/-1j

e ignorar mensagem de erro E16: intervalo inválido

    
por 20.12.2011 / 14:36