:%s/\(.*\)\n\(^[^0-9]\)//g
Se você quiser um espaço ou algo assim, adicione-o entre \ 1 e \ 2.
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
:%s/\(.*\)\n\(^[^0-9]\)//g
Se você quiser um espaço ou algo assim, adicione-o entre \ 1 e \ 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
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.
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 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 favor tente:
:g/^\d/,/^\d/-1j
e ignorar mensagem de erro E16: intervalo inválido
Tags vim vi text-processing