vim: удалить все строки, кроме уникальных?

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

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

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

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

3Beer

одна уникальная строка, которую я действительно хочу.

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

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

11
задан 7null
03.05.2023 10:14 Количество просмотров материала 3300
Распечатать страницу

4 ответа

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

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

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

5
отвечен Thor 2023-05-04 18:02

для этого можно использовать команду uniq -

uniq -u filename-to-check.txt
4
отвечен davidgo 2023-05-04 20:19
  1. выберите все строки для фильтрации.

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

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

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

2
отвечен romainl 2023-05-04 22:36

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

:!%uniq -u
1
отвечен Ingo Karkat 2023-05-05 00:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх