Como ordernar linhas no Vim

Como ordernar linhas no Vim

Comando sort – ordenar linhas

Algo que todo mundo que usa o editor Vim deve conhecer é o comando:

:sort

Ele ordena alfabeticamente as linhas de seu texto. Você também pode selecionar algumas linhas e ordernar apenas estas. Para isso, pressione shift-v para entrar no modo de seleção por linha, depois rode:

:'<,'>sort


Comando sort u – ordenar linhas excluindo as repeditas

Algo que uso muito também é o parametro u, o qual permite ordernar as linhas, mas excluindo as repetidas:

Antes:

Lucas
Lucas
Lucas
Catón
Catón

:sort u

Depois:

Catón
Lucas


Comando sort /regex/ – ordenar linhas utilizando alguma coluna

E hoje aprendi mais uma coisa realmente interessante ao ordenar um arquivo: como ordernar um texto usando alguma coluna:

Imagine o seguinte texto:

36993 vim 26M
39140 ssh 10M
34551 bash 17M


Nosso objetivo é ordenar pela terceira coluna. Para isto, basta rodar o comando sort passando uma expressão regular como parâmetro, a qual representa o que será ignorado pelo vim até começar a ordenação, ou seja, a partir da coluna que a expressão regular não “casar” mais, ele começará a ordenar. Sendo assim:

:sort /.\+\s.\+\s/

Essa expressão regular casa com [qualquer caracter em qualquer quantidade] + [um espaço] + [qualquer caracter em qualquer quantidade] + [um espaço], conforme representado abaixo:

36993 vim 26M
39140 ssh 10M
34551 bash 17M


O conteúdo depois disso será a chave para a ordenação.

Resultado:

39140 ssh 10M
34551 bash 17M
36993 vim 26M


Se quisessemos ainda ordernar pela segunda coluna:

sort /\d\{5\}\s/

Bom, é isso! Qualquer dúvida, postem nos comentários!
E se quiserem aprender mais sobre expressões regulares, vejam minha apresentação :-)

  • Vitor Laubé

    Legal heim! Pena que eu não uso o Vim… :D

  • Æ!!

    Muito legal cara! Sempre utilizo o sort mas nunca precisei utilizar dessa forma.
    Bom saber! :)

    Só para lembrar, não precisa utilizar o modo visual, dá para fazer:
    :1,3sort

    Sendo que 1,3 é o range de linhas.

    Há braços

  • Pedro

    Opa, assisti seu vídeo no youtube a agora encontro seu blog, o/, adorei seu vídeo, ainda tiro um tempo para estudar com calma o vim.

    Gostaria de perguntar se dá pra ordenar por linhas, tipo, tenho um arquivo dessa forma:
    Fulano
    123
    Beltrano
    456

    para:
    Beltrano
    456
    Fulano
    123

    problema e que os campos estão por linha e o número abaixo também teria de acompanhar o nome na ordenação, :/, estive pensando mas não vejo outra saída a não ser partir a escrever um programa para isso, e o pior é que isso seriam em cerca de 22k linhas.

  • Fala Pedro, tudo bom?

    Em vez de simplesmente responder sua pergunta, eu gravei um vídeo demonstrando como fazer.
    Espero que te ajude. Segue o link do vídeo: http://youtu.be/QGhBsw92mBQ.

  • Pedro

    Opa, muito obrigado pelo retorno e pelo vídeo :D, confesso que nunca eu pensaria dessa forma para resolver o problema. Muito obrigado mesmo, funcionou perfeitamente.
    [ ]’s

  • Que bom que resolveu seu problema ;)

    Abraço!

Comments are closed.