Como excluir a segunda coluna no Vim?

12

Eu tenho um arquivo delimitado por tabulação como:

name1   verb1   name2   verb2   etc...

Eu quero excluir a segunda coluna. Tentei editar uma dessas respostas , mas não conhecia sede awknão consegui.

Alguém pode me ajudar?

teaLeef
fonte
@KasiyO original do OP usado \ t para indicar guias.
Steeldiver #
@steeldriver Ok, você está certo. Eu pensei que faz parte da linha. removido. Mas eu editado para uma correta de acordo com a primeira mensagem .thanks
αғsнιη
1
O modo de bloco visual vim não resolve o problema? (ctrl-v no modo normal, selecione a coluna xpara excluir)?
Rmano
@Rmano ajuda, obrigado, mas você poderia me dizer como ir para o final do arquivo no modo visual? (Eu tentei ctrl G, mas não funciona).
precisa saber é o seguinte

Respostas:

10

No vim, você deve poder usar o comando

:%s/\t[^\t]*//

(substitua TABseguido por zero ou mais ocorrências de qualquer caractere, exceto TABpor nada). Se o seu arquivo tiver apenas duas colunas, você poderá usar um pouco mais simples :%s/\t.*ou :%s/\t.*$substituir o primeiro TABe qualquer caractere a seguir até o final da linha.

chave de aço
fonte
22

A resposta aceita é muito mais elegante do que essa (eu a votei!), Mas se você não se lembra, pode usar vim o modo de bloqueio visual diretamente. Abra o vim e vá (modo normal) para o primeiro canto da coluna, assim:

insira a descrição da imagem aqui

Digite CTRL-Ve você pode mover o cursor para selecionar a coluna, a meio caminho:

insira a descrição da imagem aqui

Para ir no final, pressione G:

insira a descrição da imagem aqui

o bloco parece quebrado porque estamos na última linha que está em branco; basta subir uma linha (com a seta para cima ou k) para vê-la novamente ...:

insira a descrição da imagem aqui

Agora você simplesmente pressiona xpara excluir o bloco:

insira a descrição da imagem aqui

Rmano
fonte
6

Eu usaria cutpara isso

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

Você também pode usar isso como um filtro no vim (isso substituirá todas as linhas do arquivo; você também pode usar (por exemplo) em 2,9vez de %processar as linhas 2 a 9 ou selecionar as linhas que deseja V):

:%!cut -f1,3-

-f1,3-significa 'imprimir o campo um, seguido pelo campo três e todos os campos até o final da linha'. Por padrão, cutusa uma guia como seu delimitador; se você precisar de algo mais, use a -dopção (consulte man cut).

evilsoup
fonte
4

Você pode tentar:

:%norm WdW

ou manualmente usando o modo visual:

  1. Salte para a segunda coluna (por exemplo, pressionando:) W.
  2. Inicie o bloqueio visual por Ctrl+v.
  3. Seleccionar a segunda coluna (por exemplo, premindo: W, G).
  4. Exclua pressionando d.

Para fazer isso no local a partir da linha de comando, tente:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

Relacionado: Como escrever literalmente para usar a tecla Tab para movimento?

Veja também:

kenorb
fonte
Sim, +1, mas cuidado que se você tiver linhas em branco na etapa final 3) pode dar errado ...
Rmano