2011-05-29 15:05:02 +0000 2011-05-29 15:05:02 +0000
221
221

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

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

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

Ответы (10)

315
315
315
2011-06-03 20:23:06 +0000

Есть простой способ достичь этого. Вам нужно выполнить 2 шага.

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

  2. Зайдите в меню “Поиск - Закладка - Удалить немаркированные строки”.

67
67
67
2013-02-27 16:03:51 +0000

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

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

  1. Меню поиска “Найти”. В диалоговом окне “Поиск” перейдите на вкладку “Пометить”. Активируйте регулярные выражения. Поиск ^<Path> (^ - это начало строки). Не забудьте поставить галочку напротив “Bookmark lines” и нажать “Mark All”

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

30
30
30
2013-07-08 16:51:09 +0000

Только чистый регекс

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

  1. регекс замена

  2. замена

Одноступенчатый вариант

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

Объяснение:

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

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

5
5
5
2015-12-17 11:43:30 +0000

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

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

4
4
4
2013-06-21 16:36:49 +0000

Зайти в меню Search -> Find… -> Активировать регулярные выражения. Поиск “^Path” (^ - это начало строки).

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

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

На этой новой вкладке выберите: меню Search -> Replace… -> Активировать регулярные выражения.

В поле “Поиск чего:” используйте шаблон: “Строка \d+: ”. Оставить поле “Заменить на:” пустым.

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

3
3
3
2011-05-30 01:02:36 +0000

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

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

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

3
3
3
2011-05-29 18:07:54 +0000

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

2
2
2
2011-05-30 03:00:09 +0000

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

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

Удалить все строки, не содержащие : 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
1
1
2018-05-01 14:37:57 +0000

B

0
0
0
2011-05-29 15:16:28 +0000

Используйте 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 или даже больше &007:s в строке поиска.

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

8
1
6
4
4