vim: exclui todas as linhas, mas é exclusivo?

3

Estou procurando uma maneira no VIM para excluir todas as linhas que são duplicatas e deixar apenas as linhas exclusivas que existem no arquivo. Eu preferiria uma macro, mas um comando ou função seria ótimo.

Digamos que eu tenha um arquivo com linhas duplicadas e alguns únicos:

1Apple
1Apple
2Peach
2Peach
2Peach
3Beer
4Banana
4Banana
4Banana

Eu quero excluir todas as linhas para que tudo o que resta:

3Beer

A linha única que eu REALMENTE quero.

Eu uso o tipo o tempo todo para obter uma lista única excluindo duplicatas, mas tenho vezes que preciso apenas da linha exclusiva no arquivo.

Alguma idéia de como lidar com este caso no VIM?

    
por 7null 01.02.2013 / 01:56

4 respostas

5

Você pode fazer isso com o comando substituto e uma referência anterior:

s/^\(.*\)\(\n\)\+//

Observe que isso só funciona se as linhas forem classificadas. Isso funciona combinando e removendo o primeiro grupo uma ou mais vezes na (s) próxima (s) linha (s).

    
por 01.02.2013 / 02:12
4

Você pode usar o comando "uniq" para fazer isso -

uniq -u filename-to-check.txt
    
por 01.02.2013 / 02:45
2
  1. Selecione todas as linhas que você deseja filtrar.

  2. Do :'<,'>!uniq -u<CR> , o intervalo '<,'> é adicionado automaticamente para você.

Se você quiser filtrar todo o buffer, não selecione nada e simplesmente faça :%!uniq -u<CR> .

Você pode ler sobre filtros em :h filter .

    
por 01.02.2013 / 08:54
1

Você pode invocar a ferramenta uniq como um filtro diretamente do Vim:

:!%uniq -u
    
por 01.02.2013 / 08:52

Tags