Удаление повторяющихся строк в Notepad ++


596

Можно ли удалить дублированные строки в Notepad ++, оставив только одно вхождение строки?

Ответы:


760

Notepad ++ может сделать это, если вы хотите сортировать по строкам и одновременно удалять дублирующиеся строки.

Вам понадобится плагин TextFX. Раньше это было включено в более старые версии Notepad ++, но если у вас более новая версия, вы можете добавить ее из меню, перейдя в Plugins -> Plugin Manager -> Show Plugin Manager -> Available tab -> TextFX -> Install. В некоторых случаях это тоже можно назвать TextFX Characters, но это одно и то же

Флажки и кнопка требуются теперь появятся в меню в разделе: TextFX -> TextFX Tools.

Убедитесь, что «сортировать выходные данные только уникальные ...» отмечен. Далее выберите блок текста ( Ctrl+, Aчтобы выделить весь документ). Наконец, нажмите «сортировать строки с учетом регистра» или «сортировать строки с учетом регистра»

расположение меню в n ++


32
Невероятно мощный плагин, несмотря на его «возраст». Надеюсь, они НИКОГДА не уберут его из стандартного предложения плагинов для АЭС. Парень, который думал обо всех возможностях этого плагина, был своего рода «провидцем».
GeertVc

7
Более мощный, чем Excel.
Васу

6
А как насчет Notepad ++ x64 версии? Плагин TextFX x64-версии не существует
Geograph

15
TextFx не в 64-битной версии.
Rhyous

4
@Geograph И не будет 64-битного плагина TextFx, см. Эту заметку . Поэтому было бы хорошо узнать, есть ли альтернативный плагин, обеспечивающий сортировку и удаление дубликатов.
Роберт

642

Начиная с версии Notepad ++ версии 6, вы можете использовать это регулярное выражение в диалоге поиска и замены:

^(.*?)$\s+?^(?=.*^\1$)

и заменить ничем . Это оставляет из всех повторяющихся строк последнее вхождение в файл.

Для этого не требуется сортировка, и повторяющиеся строки могут находиться в любом месте файла!

Вам необходимо проверить параметры «Регулярное выражение» и «. Соответствует новой строке»:

Блокнот ++ Заменить диалог

  • ^ соответствует началу строки.

  • (.*?)соответствует любому символу 0 или более раз, но как можно меньше (это точно соответствует строке, это необходимо из-за опции ". соответствует новой строке"). Соответствующая строка сохраняется из-за квадратных скобок и доступна с помощью\1

  • $ соответствует концу строки.

  • \s+?^ эта часть сопоставляет все пробельные символы (символы новой строки!) до начала следующей строки ==> Это удаляет символы новой строки после соответствующей строки, так что после замены не остается пустой строки.

  • (?=.*^\1$)это положительное прогнозное утверждение. Это важная часть в этом регулярном выражении, строка сопоставляется (и удаляется) только тогда, когда точно такая же строка следует в другом месте файла.


10
о, это блестяще, оно даже удаляет пустые строки, я макрос этого прямо сейчас :)
Aprillion

66
В некоторых случаях он просто удаляет ВСЕ строки в файле.
SerG

3
Есть ли способ удалить последнее событие? Это соответствует всем, кроме последнего ...
Cullub

28
В моем случае, когда это решение убрало все строки, сняв галочку, . matches newlineсделали свое дело .
Kuitsi

3
@SerG В некоторых случаях это не сработало и для меня, но когда я убрал «соответствует новой строке», это сработало :)
Давиденко

95

Если строки располагаются сразу после друг друга, вы можете использовать регулярное выражение замены:

Шаблон поиска: ^(.*\r?\n)(\1)+

Заменить: \1


1
Возможно, другим повезло с этим, но для меня ^ (. * \ N) \ 1 приводит к «Не могу найти текст»
b1nary.atr0phy

4
@ b1naryatr0phy, убедитесь, что для «Режим поиска» установлено значение «Регулярное выражение», я также обновил шаблон, чтобы он мог обрабатывать окончания строк в стиле Windows
Грант Питерс,

3
notepad ++ имеет лёгкий движок регулярных выражений, он не допускает расширенных функций, даже «? или \ r \ n», так как он работает только в одной строке и вы используете $ для символов \ r \ n
Стефан Рогин

3
это устраняет один за другим. Вы должны повторить это много раз. Интересно, почему \ n + -> \ n не работает (хотя он сообщает о многих заменах)
Val

2
@Val, если вы сделаете часть обратной ссылки совпадения группой, для которой требуется 1 или более совпадений, шаблон будет соответствовать N смежным дублирующимся линиям одновременно:^(.*\r?\n)(\1)+
Kenigmatic

37

Notepad ++

-> Заменить окно

Убедитесь, что в режиме поиска вы выбрали переключатель « Регулярное выражение »

Найти то, что:

^ (. *) (\ Г? \ П \ 1) + $

Заменить:

$ 1

Перед:

и мы думаем там

и мы думаем там

одна линия

Это возможно

Это возможно

После:

и мы думаем там

одна линия

Это возможно


2
Разве файл не должен быть отсортирован, чтобы это работало?
Питер Мортенсен

это замечательно
Ремо Лихти

30

Если вам не важен порядок строк (что, я думаю, вам не нужно), вы можете использовать Linux / FreeBSD / Mac OS X / Cygwin и сделать:

$ cat yourfile | sort | uniq > yourfile_nodups

Затем снова откройте файл в Notepad ++.


3
Не работает на Windows 7.'cat' is not recognized as an internal or external command, operable program or batch file.
Иэн Сэмюэль Маклин, старейшина,

2
@Iain Elder: cat - это стандартная утилита Unix, поэтому в этом ответе указано, что она работает на linux, FreeBSD и MacOSX. Ответ также предполагает Cygwyn: это программа для Windows, которая предоставляет оболочку в стиле Unix, а вместе с ней и cat. Короче говоря (слишком поздно!): Win 7 нуждается в Cygwin для этого.
Трэвис Кларк

11
В Windows у вас есть PowerShell:cat yourfile | sort -Unique
Elazar

9
Это хорошие примеры "безвозмездного использования кошки". Забудьте об утилите cat и просто используйте перенаправление файлов таким образом: sort <yourfile | uniq> yourfile_nodups
scott8035

1
@ scott8035, я согласен, что cat бесполезен для выполнения этой команды, но я часто нахожу полезным начинать с cat при вычислении длинной последовательности неочевидных команд, таких как cat file | сед ... | сед ... | Сед ... и так далее. Поэтому я бы сказал, что могут быть причины для использования кошки. Конечно, кошка может быть удалена в конце, но некоторые слишком ленивы для этого.
Фортран

17

Последние версии Notepad ++, по-видимому, вообще не включают плагин TextFX. Чтобы использовать плагин для сортировки / устранения дубликатов, плагин должен быть либо загружен и установлен (более задействован), либо добавлен с помощью менеджера плагинов.

А) Простой способ (как описано здесь ).

Плагины -> Диспетчер плагинов -> Показать диспетчер плагинов -> вкладка «Доступно» -> Символы TextFX -> Установить

Б) Более сложный способ, если нужна другая версия или простой способ не работает.

  1. Загрузите плагин от SourceForge:

    http://downloads.sourceforge.net/project/npp-plugins/TextFX/TextFX%20v0.26/TextFX.v0.26.unicode.bin.zip

  2. Откройте zip-файл и распакуйте NppTextFX.dll

  3. Поместите NppTextFX.dll в каталог плагинов Notepad ++, например:
    C: \ Program Files \ Notepad ++ \ plugins

  4. Запустите Notepad ++, и TextFX будет одним из пунктов меню файла (как видно из ответа №1 выше Колина Пикарда)

После установки плагина TextFX следуйте инструкциям в Ответе № 1, чтобы отсортировать и удалить дубликаты.

Кроме того, рассмотрите возможность настройки сочетания клавиш с помощью « Настройки»> «Сопоставление сокращений», если вы часто используете эту команду или хотите скопировать сочетания клавиш, такие как F9 в TextPad для сортировки.


В notepad ++ 7.6 этот плагин должен быть добавлен в C:\Users\<your_user>\AppData\Local\Notepad++\plugins\NppTextFX. Кроме этого это все еще работает отлично.
P_W999

14

В версии 7.8 это можно сделать без каких-либо плагинов - «Правка» -> «Операции со строками» -> «Удалить последовательные дубликаты». Вам нужно будет отсортировать файл, чтобы поместить повторяющиеся строки в последовательном порядке, прежде чем это сработает, но это работает как шарм.

Параметры сортировки доступны в меню «Правка» -> «Операции со строками» -> «Сортировка по ...».


7

Вам может понадобиться плагин для этого. Вы можете попробовать командную строку cc.ddl(удалить дубликаты строк) ConyEdit . Это кросс-редактор плагин для текстовых редакторов, в том числе Notepad ++.

Когда ConyEdit работает в фоновом режиме, выполните следующие действия:

  1. введите командную строку cc.ddlв конце текста.
  2. Скопируйте текст и командную строку.
  3. Вставьте, тогда вы увидите, что вы хотите.

пример
введите описание изображения здесь


5

Поиск регулярного выражения: \b(\w+)\b([\w\W]*)\b\1\b

Замените это: $1$2

Хит заменить кнопку до тех пор, пока не останется больше матчей за регулярное выражение в файле.


Создал тестовый файл, чтобы попробовать это, но регулярное выражение не работало надежно, чтобы выполнить работу.
RockPaperLizard

Не могли бы вы привести пример, который не помог, чтобы я мог улучшить свой ответ?
Хешам Эраки

4

Никто не работал для меня.

Решение:

замещать

^(.*)\s+(\r?\n\1\s+)+$

с

\1

Создал тестовый файл, чтобы попробовать это, но регулярное выражение не работало надежно, чтобы выполнить работу.
RockPaperLizard

Для всех моих данных, это работало отлично. Я забыл, каково было мое решение. Добавьте больше деталей, где это не удалось, чтобы другие люди могли улучшить это регулярное выражение.
Манохар Редди Поредди

Я создал файл, чтобы в каждой строке было целое число от 0 до 999, в случайном порядке, иногда с дубликатами. Он не удалял большинство дубликатов и не удалял дубликаты, которые не были последовательными.
RockPaperLizard

1
Пожалуйста, предоставьте 2 примера для работающих и для неработающих. Это поможет кому-то.
Манохар Редди Поредди

1
почему ^(.*)\s+(\r?\n\1\s+)+$и нет ^(.*)\s*(\r?\n\1\s*)+$?
Марк Ch

2

Менеджер плагинов в настоящее время недоступен (не входит в дистрибутив) для Notepad ++. Вы должны установить его вручную ( https://github.com/bruderstein/nppPluginManager/releases ), и даже если вы это сделаете, многие плагины больше не будут доступны (без TextFX).

Может быть, есть другой плагин, который содержит необходимые функции. Кроме этого, единственный способ сделать это в Notepad ++ - это использовать какое-то специальное регулярное выражение для сопоставления и затем заменить ( Ctrl+ FЗаменить вкладку).

Хотя есть много функций, доступных через пункт меню Edit (обрезка, удаление пустых строк, сортировка, преобразование EOL), «уникальная» операция недоступна.

Если у вас Windows 10, вы можете включить Bash (просто введите Ubuntu в Microsoft Store и следуйте инструкциям в описании для его установки) и используйте cat your_file.txt | sort | uniq > your_file_edited.txt. Конечно, вы должны находиться в том же рабочем каталоге, что и «your_file.txt», или обращаться к нему по его пути.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.