Видалити всі рядки в Блокноті ++, крім рядків, що містять потрібне мені слово?


Відповіді:


292

Існує простий спосіб досягти цього. Вам потрібно виконати 3 дії.

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

    ==> Усі рядки, які ви хочете зберегти, отримали закладку

  2. Перейдіть до меню "Пошук - Закладка - Зворотна закладка"

    ==> Усі рядки, які ви хочете видалити, закладені в закладки.

  3. Перейдіть до меню "Пошук - Закладка - Видалити закладки"

    ==> Усі рядки із закладками видалено.


47
+1. Приємно, не знав про це. Також є варіанти "Видалити немарковані лінії" або "Вирізати / скопіювати розмічені лінії", що може заощадити деякий час.
deizel

6
Спочатку у мене виникли проблеми, оскільки у моїй версії (6.2.3) Notepad ++ немає пункту меню під назвою "Позначити вкладку". Натомість вам потрібно перейти до "Пошук" -> "Знайти ..." -> натиснути на вкладку "Позначити". І вам більше не доведеться обертати закладки. У блокноті ++ тепер "Видалити немарковані лінії". Але ваша порада мені дуже допомогла! Дякую!
aakoch

22
Ви можете пропустити крок 2, оскільки можна (принаймні з версії 6.4.5) вибрати "Видалити немарковані лінії".
Джуліан

4
Я так довго використовую Notepad ++, і раніше ніколи не знав, що таке "Закладки". Дивно, наскільки потужним є цей інструмент і як мало я знаю про нього.
Дунайський матрос

Ви геніальний. це лише черговий шокуючий приклад того, як познайомитися з інструментом, який ти використовуєш реально.
Марчелло Гречі Лінс

67

Це фактично можна зробити в два етапи, як 6.3. Я думаю, що це можна зробити і раніше, ніж у мене було 5,9, коли я вперше спробував це.

Використання поста стеми як основи цієї відповіді. Зараз є ще один менший крок. Позначте лінії та видаліть немарковані лінії. Зроблено. Детальні інструкції слідують.

  1. Меню пошуку "Знайти". У діалоговому вікні Знайти натисніть на вкладку «Позначити». Активуйте регулярні вирази. Шукати ^<Path>( ^для початку лінії). Не забудьте встановити прапорець "Закладки рядків" і натисніть "Позначити всі"

    ==> Усі рядки, які ви хочете зберегти, мають закладку

  2. Меню пошуку -> Закладка -> Видалити немарковані лінії.

    ==> Видалено всі NON закладені рядки.


3
Це зайняло у мене 10 секунд, тоді як інше рішення зайняло у мене> 20 секунд. Дякую!
Чорний

Мені не потрібно було додавати ^слово в пошуковий термін, а також використовувати регулярне вираження. Сподіваюся, що це комусь допоможе.
sa_leinad

29

Очистіть розчин, призначений тільки для регексу

Двоетапний варіант

  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 або інша операційна система, можливо, вам доведеться зіпсувати це. друге - замінити його однією зворотною лінією.


1
Примітка для народів: іноді регулярний вираз із кінцем рядка (EOL) "не працює". \r\nEOL згадується в пості , що використовує Windows , і , отже , може або не може бути те , що ви шукаєте. Часто для середовищ Linux це просто \n, або в середовищах Mac просто \r, тому якщо ви витягнете файл з будь-якого, це не буде EOL у стилі Windows. Однак якщо ви завантажуєте через тригери режиму FileZilla та ASCII, вони можуть змінити їх назад у Windows EOL (як \nу \r\n). Тож якщо регулярний вираз не працює, перевірте стиль EOL, перейшовши до "Перегляд> Показати символи> Показати кінець рядка". CR = \r. LF = \n.
dhaupin

5

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

Це знайде всі рядки, що містять ваш текст, і перелічить їх внизу. Просто клацніть правою кнопкою миші на результати пошуку та скопіюйте / вставте.


Вам потрібно видалити номери рядків, замінивши їх \tLine [\d]*: . Ще чудова відповідь.
Номенон

Це не буде працювати для настільки широких ліній, що Notepad ++ скорочує його у вікні результатів пошуку.
MasterJoe2

4

Перейдіть до меню Пошук -> Знайти ... -> Активувати регулярні вирази. Шукати "^ Шлях " (^ - для початку рядка).

Натисніть кнопку "Знайти все в поточному документі".

Вікно "Знайти результат" з'явиться з усіма рядками рядків. Виберіть копіювати / вставити їх на нову вкладку в Блокноті ++.

На цій новій вкладці потрапило: Пошук у меню -> Замінити ... -> Активувати регулярні вирази.

У полі "Знайти що:" використовуйте шаблон: "Рядок \ 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 використовує синтаксис Regular Expression Basic (див. Посилання на http://www.regular-expressions.info/reference.html ). Якщо це щось на кшталт * nix шляху (/ var / www), вам знадобиться уникнути / символу, щоб ваш регулярний вираз працював.

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


Це може бути давньою відповіддю, але оскільки у неї насправді неймовірно є 2 голоси (-1 зараз від мене), я хотів прокоментувати не лише те, наскільки це неправильно, але ще раз повторюю в команді SINGLE, як я щойно (знову) взяв рядок> 100k лог-файл до 34 рядків, що містять одне слово (або фразу), в цьому випадку просто "помилка" протягом 3 секунд, просто помістивши цей регулярний вираз у ЗНАЙДЕНО ЩО: ^ (?!. *? помилка). * \ r \ n та залиште ЗАМІНИ З порожнім, і НЕ вибирайте ". відповідає новій лінії" та натисніть "ЗАМІНІТЬ ВСІ". Так, я також люблю sed і awk, але сказати, що АЕС не може цього зробити, це просто помилково.
Collin Chaffin

1

Краще рішення замінити регулярним виразом:

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

І замінити нічим


1
Ласкаво просимо до Супер Користувача! Хочете пояснити це тим, хто, можливо, не знає, що робить кожен шматочок регексу? :)
bertieb

0

Використовуйте пошук-> Замініть і введіть звичайний вираз, як ^[^ ].*і замініть все порожнім рядком, використовуючи 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 у рядку пошуку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.