182

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

Как мне это сделать?

10 ответов10

267

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

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

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

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

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

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

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

60

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

Использование сообщения Stema в качестве основы для этого ответа. Теперь на шаг меньше. Отметьте линии и удалите неотмеченные линии. Готово. Подробные инструкции следуют.

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

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

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

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

25

Чистое регулярное выражение только решение

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

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

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

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

  2. замещать

    [\r\n]{2,}
    

    с \r\n

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

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

Объяснение:

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

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

5

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

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

4

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

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

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

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

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

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

3

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

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

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

3

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

1

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

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

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

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

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

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

1

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

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

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

0

Используйте 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 в строке поиска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .