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'. Если бы я подал запрос на экранирование символа /, команда выдаст ошибку. Вы можете экранировать специальный символ (такой как /) с помощью символа обратной косой черты \.
Лучшее решение с регулярным выражением заменить:
И заменить ничем
Используйте 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 чтобы выделить весь документ). Наконец, нажмите «сортировать строки с учетом регистра» или «сортировать строки с учетом регистра»
Начиная с версии 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 работает в фоновом режиме, выполните следующие действия:
- введите командную строку cc.ddl в конце текста.
- Скопируйте текст и командную строку.
- Вставьте, тогда вы увидите, что вы хотите.
пример
Поиск регулярного выражения: \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 , чтобы выбрать весь документ). Наконец, нажмите" Сортировка строк с учетом регистра "или" Сортировка строк нечувствительна к регистру"
Ответ 2
Так как Notepad ++ Version 6, вы можете использовать это регулярное выражение в диалоге поиска и замены:
и заменить ничего. Это оставляет из всех повторяющихся строк последнее вхождение в файл.
Для этого не требуется сортировка, и повторяющиеся строки могут быть в любом месте файла!
Вам нужно проверить параметры "Регулярное выражение" и ". соответствует новой строке":
^ соответствует началу строки.
(.*?) соответствует любым символам 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 работает в фоновом режиме, выполните следующие действия:
- введите командную строку cc.ddl в конце текста.
- Скопируйте текст и командную строку.
- Вставьте, тогда вы увидите, что вы хотите.
Пример
Ответ 8
Поиск регулярного выражения: \b(\w+)\b([\w\W]*)\b\1\b
Замените его на: $1$2
Нажимайте кнопку "Заменить", пока в вашем файле больше не будет совпадений с регулярным выражением.
Ответ 9
Никто не работал для меня.
Ответ 10
Может быть, есть другой плагин, который содержит необходимые функции. Кроме этого, единственный способ сделать это в Notepad++ - использовать некоторое специальное регулярное выражение для сопоставления и последующей замены ( Ctrl + F & rarr; Заменить вкладку).
Хотя в меню Изменить доступно множество функций (обрезка, удаление пустых строк, сортировка, преобразование EOL), "уникальная" операция недоступна.
Читайте также: