Excluindo a primeira coluna com o vim

7

Eu tenho um arquivo de texto.

number 1_1 \t number1_2 \t etc
number 2_1 \t number2_2 \t etc

Eu quero remover a primeira coluna deste arquivo (correspondente a number1_1, number2_1 etc, ou seja, os números antes da primeira guia para cada linha). Eu li este post que propõe uma solução para apagar a primeira coluna (veja a resposta de Peter). No entanto, isso não funciona para mim, pois os números têm tamanhos diferentes e não posso repetir a operação para excluir a primeira coluna. Como posso fazer então?

    
por bigTree 26.05.2014 / 11:41

5 respostas

6

Isso deve excluir todos os caracteres antes e incluindo a primeira guia em qualquer linha:

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

Linha de comando cut :

cut -f 2- {filename.txt} > {filenamenew.txt}

corte os padrões para as guias; Se você quiser algo como um espaço, adicione -d " " . -f é campos para copiar. 2- significa tudo da (e incluindo) coluna 2.

    
por Rinzwind 26.05.2014 / 11:56
4

Através de awk ,

awk -F"\t" '{print FS,}' file > newfile

Ele corta a primeira coluna e imprime apenas a guia restante e a segunda coluna.

Através de sed ,

sed -r 's/^([^\t]*)\t(.*)$/\t/g' file > newfile
    
por Avinash Raj 26.05.2014 / 12:05
3

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

Em todas as linhas ( % ), substitua ( <code>/<em>ORIGINAL</em>/<em>REPLACEMENT</em>/</code>) the first occurrence of “non-tab characters ( [^ \ t] ) in any numbre ( * ) followed by a tab \ t ” by nothing. You can type <kbd>Tab</kbd> instead of \ t '.

Como alternativa, você pode combinar a sequência mais curta de caracteres ( .\{-} ) que termina em uma guia. .*\t corresponderia à correspondência mais longa de .* , então corresponderia a todos, menos à última coluna; .\{-} corresponde à correspondência mais curta, que é a primeira coluna.

:%s/.\{-}\t//

    
por Gilles 26.05.2014 / 18:52
3

Em Vi para remover a primeira coluna (separada por espaço), você pode fazer:

:%norm dW

para uma coluna separada por Tab , é:

:%norm df Ctrl + V Guia

Assim, o comando que removeria a primeira coluna do arquivo (no local) pode ser:

ex +"%norm df$(echo -e '\t')" -scwq file

Para verificar a saída antes de salvar (dry-run), substitua -scwq por -sc'%p|q!' .

Ou com base na Sugestão de Chris , como:

ex -c':exe ":%norm df\<Tab>"' -sc'%p|q!' <(echo -e "a a\tb b\tc c")

Alternativamente, faça isso no modo visual (se estiver começando no canto superior esquerdo):

  1. Insira o bloco visual por Ctrl + v .
  2. Pule no final e selecione a primeira coluna pressionando: G , E (ou ajuste manualmente).
  3. Pressione d para excluir o bloco selecionado.
por kenorb 16.10.2015 / 16:11
0

Para remover o espaço restante antes da segunda coluna, sugiro:

:%norm df Ctrl + V Guia x

    
por SergioAraujo 16.12.2016 / 11:35