Notepad удалить дубликаты строк

Обновлено: 07.07.2024

У меня есть текстовый файл, и я хочу, чтобы строки начинались с <Path> , и удалял все остальные строки.

Как я могу это сделать?

Существует простой способ добиться этого. Вам нужно выполнить 3 шага.

Зайдите в меню «Поиск»> «Найти . »> выберите вкладку «Отметить». Активируйте регулярные выражения. Поиск ^<Path> ( ^ для начала строки). Не забудьте проверить «Закладки линий» и нажать «Отметить все»

==> Все строки, которые вы хотите сохранить, имеют закладки

Зайдите в меню «Поиск - Закладка - Обратная закладка»

==> Все строки, которые вы хотите удалить, добавлены в закладки.

Зайдите в меню «Поиск - Закладка - Удалить отмеченные строки»

==> Все отмеченные строки будут удалены.

+1. Хорошо, не знал об этом. Есть также варианты «Удалить непомеченные линии» или «Вырезать / копировать отмеченные линии», которые могут сэкономить некоторое время. Сначала у меня были проблемы, потому что моя версия (6.2.3) Notepad ++ не имеет пункта меню с именем «Mark Tab». Вместо этого вам нужно перейти в «Поиск» -> «Найти . » -> нажать на вкладку «Отметить». И вам больше не нужно инвертировать закладки. Notepad ++ теперь имеет «Удалить неотмеченные строки». Но твой совет мне очень помог! Спасибо! Вы можете пропустить шаг 2, потому что можно (по крайней мере, начиная с v6.4.5) выбрать «Удалить непомеченные линии». Я так долго пользуюсь Notepad ++ и никогда раньше не знал, что такое «Закладки». Удивительно, насколько мощный этот инструмент и как мало я знаю о нем. Вы гениальный. это еще один шокирующий пример того, как узнать инструмент, который вы используете на самом деле.

На самом деле это можно сделать в два этапа, начиная с 6.3. Я думаю, что это может быть сделано раньше, чем у меня было 5,9, когда я впервые попробовал.

Поиск меню «Найти». В диалоговом окне «Найти» перейдите на вкладку «Отметить». Активируйте регулярные выражения. Поиск ^<Path> ( ^ для начала строки). Не забудьте проверить «Закладки линий» и нажать «Отметить все»

==> Все строки, которые вы хотите сохранить, теперь имеют закладку

Меню поиска -> Закладка -> Удалить неотмеченные строки.

==> Все не отмеченные закладкой строки будут удалены.

Это заняло у меня 10 секунд, в то время как другое решение заняло у меня> 20 секунд. Спасибо! Мне не нужно было добавлять ^ в мой поисковый запрос или использовать регулярные выражения. Надеюсь, это кому-нибудь поможет.

Двухступенчатый вариант

регулярное выражение заменить

замените тест запрошенным текстом

Одношаговый вариант

Используйте ^(?!<Path>).*\r\n для замены совпадений пустой строкой. Обобщенная версия будет ^(. *?test).*\r\n . Это не удалит пустую строку в конце файла. Все остальные строки удаляются, включая несколько последовательных пустых строк.

Объяснение:

(?!) это отрицательный взгляд вверх. ^.*test.*$ выделяет всю строку, содержащую запрашиваемый текст.

[\r\n] соответствует любому \r\n , встречающемуся более чем один раз, когда это строка Windows New. если у вас Linux или другая операционная система, вам может понадобиться возиться с этим. во-вторых, заменить его одной обратной строкой.

Примечание для людей: иногда регулярное выражение с концом строки (EOL) «не работает». \r\n EOL упоминается в посте , что использует Windows , и , следовательно , может или не может быть то , что вы ищете. Часто в средах Linux это просто \n или в средах Mac просто \r , так что если вы извлекаете файл из одного из них, это не будет EOL в стиле Windows. Однако, если вы загружаете через FileZilla и триггеры режима ASCII, он может изменить их обратно на Windows EOL (как \n в \r\n ). Поэтому, если регулярное выражение не работает, проверьте стиль EOL, выбрав «Вид> Показать символы> Показать конец строки». CR = \r . LF = \n .

Мне кажется, что самый простой способ - просто использовать функцию «Найти все в текущем документе», а затем либо скопировать результаты в новый файл, либо выбрать все и заменить в текущем.

Это позволит найти все строки, содержащие ваш текст, и перечислить их внизу. Просто щелкните правой кнопкой мыши на результат поиска и скопируйте / вставьте.

Вы должны удалить номера строк, заменив \tLine [\d]*: . Все еще отличный ответ. Это не будет работать для строк, которые настолько широки, что Notepad ++ усекает его в окне результатов поиска.

Зайдите в меню Поиск -> Найти . -> Активируйте регулярные выражения. Поиск «^ Путь » (^ для начала строки).

Нажмите на кнопку «Найти все в текущем документе».

Появится окно «Найти результат» со всеми линиями шаблона. Выберите скопировать / вставить их на новую вкладку в Notepad ++.

В этой новой вкладке попали: меню Поиск -> Заменить - -> Активировать регулярные выражения.

В поле «Найти что:» используйте шаблон: «Линия \ d +:». Оставьте поле «Заменить на» пустым.

Нажмите на кнопку «Заменить все».

Если вы действительно хотите сопоставить, <Path> а не путь к файловой системе, вы можете попробовать это из командной строки, используя Perl:

Он работал со Strawberry Perl в Windows, поэтому настройте его соответствующим образом, если результаты не соответствуют ожидаемым.

Это неуклюже, но скопируйте все это в Excel , а затем используйте =IF(LEFT(A1,6)="<Path>",A1,"") и скопируйте эту формулу до конца. Затем скопируйте это обратно в Notepad ++. Это не идеально, но довольно просто (если у вас есть Excel). Предупреждение: он не будет хорошо работать с отступами (Excel сместит столбцы и т. Д.).

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

Нет простого способа сделать то, что вы хотите с помощью Notepad ++. Вам нужно будет либо загрузить программу на свой компьютер, либо написать скрипт на VB (я полагаю, вы работаете в Windows).

Удалить все строки, не содержащие:
sed -i '/^<PATH>/!d' file

Вывести все строки, содержащие в новый файл:
sed -n '/^<PATH>/p' file > newfile

Пример: sed -n '/^\/var\/www/p' file > newfile
это распечатает все строки, которые начинаются с '/ var / www'. Если бы я подал запрос на экранирование символа /, команда выдаст ошибку. Вы можете экранировать специальный символ (такой как /) с помощью символа обратной косой черты \.

Это может быть старый ответ, но так как на самом деле он невероятно имеет 2 голоса (-1 теперь от меня), он хотел прокомментировать не только то, насколько он ошибочен, но и повторить в единственной командной операции, как я просто (снова) взял строку> 100k файл журнала до 34 строк, содержащих одно слово (или фразу), в этом случае просто «ошибка» менее чем за 3 секунды, просто поместив это регулярное выражение в НАЙТИ ЧТО: ^ (. *? error). * \ r \ n и оставив поле REPLACE WITH пустым, НЕ выбирайте «. соответствия новой строки» и нажмите «ЗАМЕНИТЬ ВСЕ». Да, я тоже люблю sed и awk, но говорить, что АЭС не может этого сделать, - просто ложь.

Лучшее решение с регулярным выражением заменить:

И заменить ничем

Используйте Search-> Replace и введите регулярное выражение как ^[^ ].* и замените все на пустую строку, используя Regular expression . Следующий шаг - найти пустые строки в поисках \n\n замены с \n использованием Extended несколько раз до 0 occurrences were found. (используйте \r\n\r\n и в \r\n зависимости от формата файла). Если у вас очень много пустых строк в строке, это быстрее использовать \n\n\n\n\n\n\n или даже больше \n : s в строке поиска.

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

Я хочу сказать Notepad ++, что я хочу удалить каждое дублированное слово в строке. Для этого примера dangerous, будут удалены:

У меня есть несколько таких строк, и поэтому я ищу автоматический способ сделать это.

Как насчет dangerous,hazardous,dangerous,perilous ? Другими словами, дублированные слова всегда рядом друг с другом?

Вы можете использовать регулярное выражение для удаления последовательных дублированных слов в строке, однако я не думаю, что возможно удалить дублированные слова, которые не являются последовательными (например dangerous, hazardous, dangerous ).

Используйте это регулярное выражение в окне замены в Notepad ++, и не забудьте выбрать «Регулярное выражение» в качестве опции режима поиска ниже:

Это регулярное выражение удаляет все последовательные дублированные слова - будь то 2 дублированными словами или 10 дублированных слов последовательно: \b(\w+)(. \s+\1\b)+ .

Точно такое же регулярное выражение без запятых будет: \b(\w+)(?:\s+\1\b)+ (может быть полезно для других пользователей).

Если вы хотите , регулярное выражение , в частности только два дублированных слова (двойники), используйте это регулярное выражение: (\b\w+\b)\W+\1 .

Поместите это регулярное выражение в Заменить коробку , чтобы сохранить одно вхождение слова ( в противном случае все повторяющиеся слова будут удалены): $ .

Эти регулярные выражения исправят ситуацию, подобную той, что вы описали в своем вопросе в качестве примера. Первое регулярное выражение будет работать для каждого числа дублированных слов (например dangerous, dangerous, dangerous, dangerous, hazardous ), а вторая версия будет работать только для двух дублированных слов (например dangerous, dangerous, hazardous ).

Примечание: регулярное выражение будет применяться только к формату , описанному в вопросе, а это означает , что форматы , такие как two words, two words, anotherword , two-words, two-words, anotherword , three words expression, three words expression, anotherword не будет изменено , поскольку регулярное выражение не будет применяться к ним.

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

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

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

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

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

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

Невероятно мощный плагин, несмотря на его «возраст». Надеюсь, они НИКОГДА не уберут его из стандартного предложения плагинов для АЭС. Парень, который думал обо всех возможностях этого плагина, был своего рода «провидцем». А как насчет Notepad ++ x64 версии? Плагин TextFX x64-версии не существует @Geograph И не будет 64-битного плагина TextFx, см. Эту заметку . Поэтому было бы хорошо узнать, есть ли альтернативный плагин, обеспечивающий сортировку и удаление дубликатов.

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

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

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

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

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

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

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

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

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

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

о, это блестяще, оно даже удаляет пустые строки, я макрос этого прямо сейчас :) В некоторых случаях он просто удаляет ВСЕ строки в файле. Есть ли способ удалить последнее событие? Это соответствует всем, кроме последнего . В моем случае, когда это решение убрало все строки, сняв галочку, . matches newline сделали свое дело . @SerG В некоторых случаях это не сработало и для меня, но когда я убрал «соответствует новой строке», это сработало :)

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

Возможно, другим повезло с этим, но для меня ^ (. * \ N) \ 1 приводит к «Не могу найти текст» @ b1naryatr0phy, убедитесь, что для «Режим поиска» установлено значение «Регулярное выражение», я также обновил шаблон, чтобы он мог обрабатывать окончания строк в стиле Windows notepad ++ имеет лёгкий движок регулярных выражений, он не допускает расширенных функций, даже «? или \ r \ n», так как он работает только в одной строке и вы используете $ для символов \ r \ n это устраняет один за другим. Вы должны повторить это много раз. Интересно, почему \ n + -> \ n не работает (хотя он сообщает о многих заменах) @Val, если вы сделаете часть обратной ссылки совпадения группой, для которой требуется 1 или более совпадений, шаблон будет соответствовать N смежным дублирующимся линиям одновременно: ^(.*\r?\n)(\1)+

Notepad ++

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

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

Заменить:

Перед:

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

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

одна линия

Это возможно

Это возможно

После:

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

одна линия

Это возможно

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

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

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

Не работает на Windows 7. 'cat' is not recognized as an internal or external command, operable program or batch file. @Iain Elder: cat - это стандартная утилита Unix, поэтому в этом ответе указано, что она работает на linux, FreeBSD и MacOSX. Ответ также предполагает Cygwyn: это программа для Windows, которая предоставляет оболочку в стиле Unix, а вместе с ней и cat. Короче говоря (слишком поздно!): Win 7 нуждается в Cygwin для этого. В Windows у вас есть PowerShell: cat yourfile | sort -Unique Это хорошие примеры "безвозмездного использования кошки". Забудьте об утилите cat и просто используйте перенаправление файлов таким образом: sort <yourfile | uniq> yourfile_nodups @ scott8035, я согласен, что cat бесполезен для выполнения этой команды, но я часто нахожу полезным начинать с cat при вычислении длинной последовательности неочевидных команд, таких как cat file | сед . | сед . | Сед . и так далее. Поэтому я бы сказал, что могут быть причины для использования кошки. Конечно, кошка может быть удалена в конце, но некоторые слишком ленивы для этого.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

пример

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

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

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

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

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

Создал тестовый файл, чтобы попробовать это, но регулярное выражение не работало надежно, чтобы выполнить работу. Для всех моих данных, это работало отлично. Я забыл, каково было мое решение. Добавьте больше деталей, где это не удалось, чтобы другие люди могли улучшить это регулярное выражение. Я создал файл, чтобы в каждой строке было целое число от 0 до 999, в случайном порядке, иногда с дубликатами. Он не удалял большинство дубликатов и не удалял дубликаты, которые не были последовательными. Пожалуйста, предоставьте 2 примера для работающих и для неработающих. Это поможет кому-то.

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

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

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

ОТВЕТЫ

Ответ 1

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

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

Необходимые флажки и кнопки теперь появятся в меню под: TextFX -> TextFX Tools .

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

menu layout in n++

Ответ 2

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

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

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

Вам нужно проверить параметры "Регулярное выражение" и ". соответствует новой строке":

Notepad++ Replace dialogue

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

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

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

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

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

Ответ 3

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

Ответ 4

Notepad++

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

Найдите что:

Заменить на:

Перед тем:

и мы думаем, что там

и мы думаем, что там

одна строка

Можно ли

Можно ли

После того, как:

и мы думаем, что там

одна строка

Это возможно

Ответ 5

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

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

Ответ 6

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

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

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

Загрузите плагин с SourceForge:

Откройте ZIP файл и извлеките NppTextFX.dll

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

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

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

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

Ответ 7

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

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

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

Пример

Ответ 8

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

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

Нажимайте кнопку "Заменить", пока в вашем файле больше не будет совпадений с регулярным выражением.

Ответ 9

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

Ответ 10

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

Хотя в меню Изменить доступно множество функций (обрезка, удаление пустых строк, сортировка, преобразование EOL), "уникальная" операция недоступна.

Читайте также: