Видалення повторюваних рядків у Блокноті ++


595

Чи можна видалити дублювані рядки в Блокноті ++, залишивши лише одне виникнення рядка?

Відповіді:


759

Блокнот ++ може це зробити за умови, що ви хочете сортувати за рядком і одночасно видаляти повторювані рядки.

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

Прапорці та кнопка потрібні тепер з'являться в меню в розділі: TextFX -> TextFX Tools.

Переконайтесь, що прапорець "сортувати виходи лише унікальні ...". Далі виберіть блок тексту ( Ctrl+, Aщоб вибрати весь документ). Нарешті, натисніть «Сортувати рядки з урахуванням регістру» або «Сортувати рядки без регістру»

макет меню в n ++


32
Неймовірно потужний плагін, незважаючи на його "вік". Сподіваємось, вони НІКОЛИ не видалять цю програму зі стандартної пропозиції плагінів АЕС. Хлопець, який продумав усі можливості цього плагіна, був свого роду "прозорливим".
GeertVc

7
Більш потужний, ніж видатний.
Васу

6
Що з версією Notepad ++ x64? Плагін TextFX x64-версія не існує
Географ

15
TextFx відсутній у 64-розрядної версії.
Rhyous

4
@Geograph І не буде 64 біт Плагін TextFX бачити цю ноту . Тому було б добре знати, чи існує альтернативний плагін, що забезпечує сортування та видалення дублікатів.
Роберт

641

Оскільки Notepad ++ версії 6, ви можете використовувати цей регулярний вираз у діалозі пошуку та заміни:

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

і замінити нічим . Це залишає з усіх повторюваних рядків останнє явище у файлі.

Для цього не потрібне сортування, а копії рядків можуть бути в будь-якому місці файлу!

Вам потрібно перевірити параметри "Регулярний вираз" та ". Відповідає новому рядку":

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

  • ^ відповідає початку рядка.

  • (.*?)відповідає будь-яким символам 0 або більше разів, але якомога менше (це відповідає точно в рядку, це потрібно через опцію ". відповідає новій лінії"). Відповідний рядок зберігається через дужки навколо та доступні для використання\1

  • $ відповідає кінці рядка.

  • \s+?^ ця частина відповідає всім символам пробілу (нові рядки!) до початку наступного рядка ==> Це видаляє нові рядки після відповідного рядка, так що після заміни не буде порожнього рядка.

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


10
о, цей геніальний, він навіть видаляє порожні рядки, я макросую його саме цієї хвилини :)
Квільйон

66
Він просто видаляє ВСІ рядки у файлі в деяких випадках.
Серг

3
Чи є спосіб зняти ОСТАННЕ виникнення? Це відповідає всім, крім останнього ...
Cullub

28
У моєму випадку, коли це рішення видалило всі рядки, знявши прапорець . matches newline.
Куїці

3
@SerG У деяких випадках це не працювало і для мене, але коли я видалив "збіги нового рядка", це зробив :)
Давиденко

95

Якщо рядки знаходяться одразу один за одним, тоді ви можете використати форму заміни:

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

Замінити: \1


1
Можливо, у когось із цим пощастило, але для мене ^ (. * \ N) \ 1 призводить до "Не
можу

4
@ b1naryatr0phy переконайтесь, що для режиму пошуку встановлено значення "Регулярний вираз", я також оновив шаблон, щоб він міг обробляти закінчення ліній стилю Windows
Грант Петерс,

3
у блокноті ++ є двигун легкого регексу, він не дозволяє розвинутим функціям, навіть "? чи \ r \ n", оскільки він працює лише в одному рядку, і ви використовуєте $ для символів \ r \ n
Стефан Рогін

3
це виключає по черзі. Ви повинні повторити це багато разів. Цікаво, чому \ n + -> \ n не працює (думав, що він повідомляє про багато замін)
Val

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

37

Блокнот ++

-> Замініть вікно

Переконайтесь, що в режимі пошуку ви вибрали перемикач Регулярне вираження

Знайти що:

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

Замінити:

$ 1

Перед:

і ми думаємо там

і ми думаємо там

один рядок

Чи можна

Чи можна

Після:

і ми думаємо там

один рядок

Чи можна


2
Чи не потрібно файл сортувати, щоб це працювало?
Пітер Мортенсен

це геніально
Ремо Ліхті

30

Якщо ви не переймаєтесь порядком рядків (що, на мою думку, ви не робите), ви можете скористатися вікном Linux / FreeBSD / Mac OS X / Cygwin і виконати:

$ cat yourfile | sort | uniq > yourfile_nodups

Потім знову відкрийте файл у Блокноті ++.


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, а разом з нею і кіт. Довга коротка історія (занадто пізно!): Win 7 для цього потрібен Cygwin.
Тревіс Кларк

11
У вікнах ви маєте повноваження:cat yourfile | sort -Unique
Елазар,

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

1
@ scott8035, я погоджуюся, що кіт не корисний для запуску цієї команди, але мені здається, що часто корисно починати з кота, коли з'ясовуєш довгу послідовність неочевидних команд, як файл кішок | sed ... | sed ... | sed ... і так далі. Тому я б сказав, що можуть бути причини використання кота. Звичайно, кішку можна видалити наприкінці, але деякі для цього занадто ледачі.
FORTRAN

17

Останні версії Notepad ++, мабуть, зовсім не включають плагін TextFX. Щоб використовувати плагін для сортування / усунення дублікатів, плагін потрібно або завантажити, і встановити (більше задіяти), або додати за допомогою диспетчера плагінів.

A) Простий спосіб (як описано тут ).

Плагіни -> Диспетчер плагінів -> Показати Менеджер плагінів -> Вкладка "Доступні" -> Символи TextFX -> Встановити

Б) Більш задіяний спосіб, якщо потрібна інша версія або простий спосіб не працює.

  1. Завантажте плагін з SourceForge:

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

  2. Відкрийте поштовий файл і витягніть NppTextFX.dll

  3. Розмістіть NppTextFX.dll в каталозі плагінів Notepad ++, таких як:
    C: \ Program Files \ Notepad ++ \ plugins

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

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

Крім того, розгляньте можливість налаштування ярлика на клавіатурі за допомогою Налаштування> Макет скорочення, якщо ви часто використовуєте цю команду або хочете скопіювати ярлик клавіатури, наприклад F9 у TextPad для сортування.


У блокноті ++ 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*)+$?
Марк Ч.

2

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

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

Хоча за допомогою пункту меню « Правка » доступно багато функцій (обрізка, видалення порожніх рядків, сортування, перетворення 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.