Удалить все строки в Notepad ++, кроме строк, содержащих нужное мне слово?

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

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

171 голос | спросил alon 29 Maypm11 2011, 19:05:02

10 ответов


251

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

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

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

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

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

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

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

ответил stema 4 J0000006Europe/Moscow 2011, 00:23:06
56

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

Используя пост stema в качестве основы для этого ответа. Сейчас еще один шаг. Отметьте линии и удалите немаркированные строки. Готово. Ниже приводятся подробные инструкции.

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

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

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

    == > Все NON Закладочные строки удаляются.

ответил Recognizer 27 FebruaryEurope/MoscowbWed, 27 Feb 2013 20:03:51 +0400000000pmWed, 27 Feb 2013 20:03:51 +040013 2013, 20:03:51
25

Только для очистки только регулярного выражения

Двухэтапный вариант

  1. regex заменить

    (?!^.*test.*$)^.+
    

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

  2. заменить

    [\r\n]{2,}
    

    с \r\n

Вариант с одним шагом

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

Объяснение:

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

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

ответил sonar0m 8 J000000Monday13 2013, 20:51:09
5

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

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

ответил Gubbins 17 ThuEurope/Moscow2015-12-17T14:43:30+03:00Europe/Moscow12bEurope/MoscowThu, 17 Dec 2015 14:43:30 +0300 2015, 14:43:30
4

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

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

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

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

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

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

ответил Luis 21 J0000006Europe/Moscow 2013, 20:36:49
3

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

perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt

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

ответил Joe Internet 30 Mayam11 2011, 05:02:36
3

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

ответил soandos 29 Maypm11 2011, 22:07:54
2

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

Вы можете сделать то, что хотите, с одним из двух способов. Утилита sed является фаворитом на * nix и может быть найдена для Windows от великих людей в GnuWin ( http://gnuwin32.sourceforge.net/packages/sed.htm ). Вы загрузите эту программу, а затем запустите свою команду из командной строки.

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

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

Я предлагаю вам использовать строки, которые вы хотите добавить к новому файлу. Причина этого в том, что вы, вероятно, не получите оператор regex в первый раз. Утилита sed использует стандартный синтаксис регулярного выражения (просмотрите ссылку в http: //www.ррегулярные выражения .info /reference.html ). Если это что-то вроде пути * nix (/var /www), вам нужно будет избежать символа /для вашего регулярного выражения, чтобы работать.

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

ответил Chris Ting 30 Mayam11 2011, 07:00:09
0

Используйте Search-> Замените и введите регулярное выражение, например ^[^ ].*, и замените все на пустую строку, используя 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 в строке поиска.

ответил AndersTornkvist 29 Maypm11 2011, 19:16:28
0

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

(?!^.*SOMETEXT.*$)^.+\r?\n

И замените ничего

ответил LoneDev 1 Maypm18 2018, 17:37:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132