3

Я ищу способ в VIM, чтобы удалить все строки, которые являются дубликатами и оставить только уникальные строки, которые существуют в файле. Я бы предпочел макрос, но команда или функция были бы хороши.

Скажем, у меня есть файл, который содержит повторяющиеся строки и некоторые уникальные:

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

Я хочу удалить все строки, чтобы все, что осталось:

3Beer

Единственная уникальная линия, которую я ДЕЙСТВИТЕЛЬНО хочу.

Я все время использую sort u, чтобы получить уникальный список, удаляя дубликаты, но иногда мне просто нужна уникальная строка в файле.

Есть идеи, как справиться с этим делом в VIM?

4 ответа4

5

Вы можете сделать это с помощью команды замены и обратной ссылки:

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

Обратите внимание, что это работает, только если строки отсортированы. Это работает путем сопоставления и удаления первой группы один или несколько раз на следующей строке (-ях).

4

Вы можете использовать команду "uniq", чтобы сделать это -

uniq -u filename-to-check.txt
2
  1. Выберите все строки, которые вы хотите отфильтровать.

  2. Делай :'<,'>!uniq -u<CR> , диапазон '<,'> добавляется автоматически.

Если вы хотите отфильтровать весь буфер, не выбирайте ничего и просто сделайте :%!uniq -u<CR> .

Вы можете прочитать о фильтрах в :h filter .

1

Вы можете вызвать инструмент uniq как фильтр непосредственно из Vim:

:!%uniq -u

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .