У меня есть текстовый файл, и я хочу, чтобы строки начинались с <Path>
, и удаляю все остальные строки.
Как мне это сделать?
У меня есть текстовый файл, и я хочу, чтобы строки начинались с <Path>
, и удаляю все остальные строки.
Как мне это сделать?
Существует простой способ добиться этого. Вам нужно выполнить 3 шага.
Зайдите в меню "Поиск"> «Найти ...»> выберите вкладку "Отметить". Активируйте регулярные выражения. Поиск ^<Path>
(^
для начала строки). Не забудьте проверить "Закладки линий" и нажать "Отметить все"
==> Все строки, которые вы хотите сохранить, имеют закладки
Зайдите в меню «Поиск - Закладка - Обратная закладка»
==> Все строки, которые вы хотите удалить, добавлены в закладки.
Зайдите в меню «Поиск - Закладка - Удалить отмеченные строки»
==> Все отмеченные строки будут удалены.
На самом деле это можно сделать в два этапа, начиная с 6.3. Я думаю, что это может быть сделано раньше, чем у меня было 5,9, когда я впервые попробовал.
Использование сообщения Stema в качестве основы для этого ответа. Теперь на шаг меньше. Отметьте линии и удалите неотмеченные линии. Готово. Подробные инструкции следуют.
Поиск меню "Найти". В диалоговом окне "Найти" перейдите на вкладку "Отметить". Активируйте регулярные выражения. Поиск ^<Path>
(^
для начала строки). Не забудьте проверить "Закладки линий" и нажать "Отметить все"
==> Все строки, которые вы хотите сохранить, теперь имеют закладку
Меню поиска -> Закладка -> Удалить неотмеченные строки.
==> Все не отмеченные закладкой строки будут удалены.
регулярное выражение заменить
(?!^.*test.*$)^.+
замените тест запрошенным текстом
замещать
[\r\n]{2,}
с \r\n
Используйте ^(?!<Path>).*\r\n
чтобы заменить совпадения пустой строкой. Обобщенная версия будет ^(?!.*?test).*\r\n
. Это не удалит пустую строку в конце файла. Все остальные строки удаляются, включая несколько последовательных пустых строк.
(?!)
это отрицательный взгляд вверх. ^.*test.*$
выделяет всю строку, содержащую запрошенный текст.
[\r\n]{2,}
соответствует любому \r\n
, встречающемуся чаще, чем когда это строка Windows New. если у вас Linux или другая операционная система, вам может понадобиться возиться с этим. во-вторых, заменить его одной обратной строкой.
Мне кажется, что самый простой способ - просто использовать функцию "Найти все в текущем документе", а затем либо скопировать результаты в новый файл, либо выбрать все и заменить в текущем.
Это позволит найти все строки, содержащие ваш текст, и перечислить их внизу. Просто щелкните правой кнопкой мыши по результату поиска и скопируйте / вставьте.
Зайдите в меню Поиск -> Найти ... -> Активировать регулярные выражения. Поиск «^ Путь » (^ для начала строки).
Нажмите на кнопку "Найти все в текущем документе".
Появится окно "Найти результат" со всеми линиями шаблона. Выберите скопировать / вставить их на новую вкладку в Notepad++.
В этой новой вкладке попали: меню Поиск -> Заменить - -> Активировать регулярные выражения.
В поле «Найти что:» используйте шаблон: «Линия \d+:». Оставьте поле «Заменить на» пустым.
Нажмите на кнопку "Заменить все".
Если вы действительно хотите использовать <Path>
а не путь к файловой системе, вы можете попробовать это из командной строки, используя Perl:
perl -pe " if ($_ !~ /<Path>/) { s/$_// } " < in.txt > out.txt
Он работал со Strawberry Perl в Windows, поэтому настройте его соответствующим образом, если результаты не соответствуют ожидаемым.
Это неуклюже, но скопируйте все это в Excel, а затем используйте =IF(LEFT(A1,6)="<Path>",A1,"")
и скопируйте эту формулу до конца. Затем скопируйте это обратно в Блокнот ++. Это не идеально, но довольно просто (если у вас есть Excel). Предупреждение: он не будет хорошо работать с отступами (Excel сместит столбцы и т.д.).
Нет простого способа сделать то, что вы хотите с помощью 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'. Если бы я подал запрос на экранирование символа /, команда выдаст ошибку. Вы можете экранировать специальный символ (такой как /) с помощью символа обратной косой черты \.
Лучшее решение с регулярным выражением заменить:
(?!^.*SOMETEXT.*$)^.+\r?\n
И заменить ничем
Используйте 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 в строке поиска.