Regex: видаліть рядки, що містять "довідку" тощо


371

У мене довгий документ команд. Використовуючи Notepad ++ або regex, я хочу видалити всі рядки, що містять "довідку", включаючи клавіатуру_help тощо.

Як це можна зробити?

Відповіді:


945

Це також можливо за допомогою Notepad ++:

  • Перейдіть до меню пошуку Ctrl+ Fі відкрийте вкладку Позначити .
  • Поставте прапорець Закладка (якщо немає оновлення вкладки Позначити до поточної версії).

  • Введіть пошуковий термін і натисніть Позначити всіх

    • Всі рядки, що містять пошуковий термін, розміщуються в закладках.
  • Тепер перейдіть до меню ПошукЗакладкаВидалити закладки

  • Зроблено.


36
Ага! У ньому також є «Видалити немарковані лінії», що є як grep, саме те, що мені потрібно!
Хлоя

6
Дякую, це акуратний трюк. Я вважаю за краще зробити це декількома простими клацаннями, ніж запустити консоль Unix (не зважаючи на те, що я в основному в Windows), cdв шлях і ввести складну команду (турбуючись про синтаксис і про постійне вивертання, а потім зрозумівши резервного копіювання немає) [ Не зрозумійте мене неправильно, я використовую консольні команди весь час для інших речей, але для чогось подібного це просто
зайвий зріст

2
Просто врятувало мені багато часу :-)
Брля

3
перевірка BOOKMARK LINEтут важлива, інакше це не буде працювати !.
HaSeeB MiR

1
@AndrewSchultz, вибач, але ні.
стема

187

Ще один спосіб зробити це в «Блокноті ++» - це все в діалоговому вікні «Знайти / замінити» та з допомогою регулярного вираження:

  • Ctrl+ hвідкрити діалогове вікно пошуку заміни.

  • У Find what:текстовому полі включіть ваш регулярний вираз: .*help.*\r?\n(де \rце необов'язково, якщо у файлу немає кінцівки рядка Windows).

  • Залиште Replace with:текстове поле порожнім.

  • Переконайтесь, що в області режиму пошуку вибрано перемикач регулярних виразів. Потім натисніть Replace Allі вуаляйте! Усі рядки, що містять вашу пошукову термін help, видалено.

Як замінити рядок у N ++


17
краща відповідь, ніж використання вкладки позначки, оскільки це можна зробити для "Знайти у файлах"
Алекс

2
Не забудьте уникнути спеціальних символів, таких як дужки із зворотним нахилом.
Номенон

4
не забудьте зняти прапорець ".
match

1
Краща відповідь через більш високу продуктивність. З файлами на> 1 мільйони рядків метод закладки розтягується на максимум, також на сучасних машинах.
Roland Ettinger

17

Легке завдання з grep:

grep -v help filename

Додайте > newFileNameдо виводу переспрямування до нового файлу.


Оновлення

Щоб уточнити це, нормальною поведінкою буде друк рядків на екрані. Для передачі його у файл >можна використовувати. Таким чином, у цій команді:

grep -v help filename > newFileName
  1. grepвикликає grepпрограму, очевидно
  2. -v- прапор для зворотного виводу. За замовчуванням grepдрукує лінії, що відповідають заданому малюнку. За допомогою цього прапора він буде друкувати лінії, які не відповідають шаблону.
  3. help це відповідна модель
  4. filename - це ім'я вхідного файлу
  5. > переспрямовує вихід на наступний елемент
  6. newFileName новий файл, де буде збережено вихід.

Як ви помітили, ви не будете видаляти речі у своєму файлі. grepпрочитає його, а інший файл буде збережено, відповідно змінено.


@Kevin герцог: На жаль! Це, ймовірно, означає, що ви не grepвстановили. У будь-якому разі я б рекомендував вам встановити GNU grep, він, безумовно, буде працювати в Windows, і це дійсно корисний інструмент.
sidyll

@sidyll він знав, що таке grep, і він зробив купу результатів, це могло бути, тому що я не вказав вихідний файл
лимон

2
@Kevin Duke: як я вже говорив у відповіді, вихід може бути перенаправлений. Стандартна поведінка друкується на екрані. Для перенаправлення ви використовуєте трубу ( >в даному випадку), даючи остаточну командуgrep -v help filename > outputFileName
sidyll

Дякую, я обов'язково спробую це!
лимон

grep> sed в будь-який день тижня для ЗНАЙДЕННЯ послідовностей символів
kwikness

13

Зробити це можна за допомогою sed: sed '/help/ d' < inputFile > outputFile


4
@CengizFrostclaw: У командному рядку на Linux / Mac / Що завгодно. Якщо ви працюєте в Windows, вам доведеться встановити щось на зразок CygWin і використовувати це.
Тихон Єлвіс

Дякую @TikhonJelvis! І останнє запитання, чи можемо ми зробити sed 'help /', щоб видалити всі рядки, що починаються (не містять) з допомогою?
jeff

3
@CengizFrostclaw: Я думаю, що sed '/^help/ d'має працювати. ^Являє собою початок рядка.
Тихон Єлвіс

@jeff PowerShell має sedіgrep
Ooker

cygwin може не працювати у Windows з файлами utf-16. Утиліти Cygwin за замовчуванням використовують UFT-8. Дуже мало хто з них підтримує UTF-16. Використовуйте babun babun.github.io . Він виконує функцію обгортки навколо cygwin, але забезпечує багато предметів із коробки.
Сахіл Сінгх


6

Якщо ви працюєте в Windows , спробуйте findstr. Сторонні інструменти не потрібні:

findstr /V /L "searchstring" inputfile.txt > outputfile.txt

Він також підтримує регулярний гекс. Просто прочитайте довідку інструментуfindstr /? .

PS Якщо ви хочете працювати з великим, величезним файлами (як-от файли журналу 400 Мб), текстовий редактор не дуже ефективний у пам’яті, тому, як хтось уже вказував, інструменти командного рядка - це шлях. Але в Windows немає жодної грефи, так що ...

Я просто запустив це на 1 Гб лог-файл, і це буквально зайняло 3 секунди.

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