Regex: удалить строки, содержащие «помощь» и т. Д.

372

У меня есть длинный документ команд. Используя Notepad ++ или regex, я хочу удалить все строки, содержащие «help», включая keyboard_help и т. Д.

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

лимон
источник

Ответы:

947

Это также возможно с Notepad ++:

  • Перейдите в меню поиска Ctrl+ Fи откройте вкладку « Отметить ».
  • Проверьте строку «Закладка» (если вкладка « Отметка » не обновлена ​​до текущей версии).

  • Введите условие поиска и нажмите « Отметить все»

    • Все строки, содержащие поисковый запрос, добавляются в закладки.
  • Теперь перейдите в меню ПоискЗакладкаУдалить отмеченные строки

  • Выполнено.

Stema
источник
36
Да! У него также есть «Remove Unmarked Lines», который похож на grep, именно то, что мне нужно!
Хлоя
6
Спасибо, это ловкий трюк. Я предпочел бы сделать это с помощью нескольких простых щелчков, чем запустить консоль Unix (игнорируя, что я в основном на Windows), cdв путь и ввести сложную команду (беспокоиться о синтаксисе и об окончательном сбое, а затем реализовать нет резервной копии). [ Не поймите меня неправильно, я все время использую консольные команды для других вещей, но для чего-то подобного это просто излишество.]
ADTC
2
Просто сэкономил мне много времени :-)
Brlja
3
проверка BOOKMARK LINEздесь важна, иначе она не сработает!
HaSeeB MiR
1
@AndrewSchultz, извините, но нет.
Stema
187

Еще один способ сделать это в Notepad ++ - это все в диалоге Find / Replace и с помощью regex:

  • Ctrl+, hчтобы вызвать диалог поиска замены.

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

  • Оставьте Replace with:текстовое поле пустым.

  • Убедитесь, что установлен переключатель «Регулярное выражение» в области «Режим поиска». Тогда нажмите Replace Allи вуаля! Все строки, содержащие ваш поисковый запрос help, были удалены.

Как заменить строку в N ++

OozeMeister
источник
17
лучше ответить, чем использовать закладку, так как это можно сделать для «Найти в файлах»
Alex
2
Обязательно экранируйте специальные символы, такие как скобки, с обратной косой чертой.
Ноумен
4
убедитесь, что
сняли отметку
1
Лучший ответ благодаря более высокой производительности. При использовании файлов размером более 1 миллиона строк метод закладок расширяется до максимума, в том числе на современных машинах.
Роланд Эттингер
18

Простая задача с 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прочитает его, и другой файл будет сохранен, соответственно изменен.

sidyll
источник
@Kevin Герцог: Увы! Это, вероятно, означает, что вы не grepустановили. В любом случае, я бы порекомендовал вам установить GNU grep, он, безусловно, будет работать на Windows, и это действительно полезный инструмент.
Сидил
@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 /' удалить все строки, начинающиеся (не содержащие) с помощью?
Джефф
3
@CengizFrostclaw: я думаю, sed '/^help/ d'должно работать. ^Представляет собой начало строки.
Тихон Джелвис
@jeff PowerShell имеет sedиgrep
Ooker
cygwin может не работать на windows с файлами utf-16. Утилиты Cygwin по умолчанию используют UFT-8. Очень немногие из них поддерживают UTF-16. Используйте babun babun.github.io . Он действует как обертка вокруг Cygwin, но предоставляет много вещей из коробки.
Сахил Сингх
9

Поиск по регулярному выражению:

^.*(help).*$
Роб Роб
источник
2
Как насчет удаления части?
Питер Мортенсен
1
@PeterMortensen Найти \n\n, заменить на `` (ничего)
Лев
6

Если вы на Windows , попробуйте findstr. Сторонние инструменты не нужны:

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

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

PS Если вы хотите работать с большими, огромными файлами (например, файлами журналов размером 400 МБ), текстовый редактор не очень экономит память, поэтому, как кто-то уже отметил, инструменты командной строки - это то, что нужно. Но в Windows нет grep, так что ...

Я только что запустил это на 1 ГБ лог-файл, и это буквально заняло 3 секунды.

Alex
источник