Бесплатное приложение командной строки Windows для удаления всех строк в текстовом файле, содержащих заданную строку.

Вопрос или проблема

Я стараюсь разобраться в большом лог-файле. Там есть несколько повторяющихся строк, которые я хотел бы удалить, чтобы сделать текст более читабельным.

Я могу сделать это с помощью Notepad++, поставив закладки на все строки, содержащие такие подстроки, а затем удалив все отмеченные строки, но предпочел бы инструмент командной строки.

Прежде чем я напишу быстрое скрипт на Python, есть ли что-то существующее?

Должно быть бесплатно. Должна быть встроенная команда или портативное приложение, так как я ограничен и не могу устанавливать новое программное обеспечение.

Просто removelines log.txt foo или removelines log.txt foo bar, чтобы удалить строки, содержащие “foo” или “foo”, или “bar”. Я предпочел бы не использовать регулярные выражения по … причинам

Ответ или решение

Для удаления строк из текстового файла, содержащих определенные подстроки, вы можете воспользоваться встроенными средствами Windows. Вот шаги, которые позволят вам добиться желаемого результата с помощью командной строки.

Использование команды PowerShell

PowerShell позволяет легко обрабатывать текстовые файлы. Вот пример команды, которая удалит строки, содержащие указанные подстроки (например, "foo" и "bar"):

  1. Откройте PowerShell. Для этого нажмите Win + R, введите powershell и нажмите Enter.

  2. Используйте следующую команду, заменив log.txt на имя вашего файла и указывая слова, которые нужно удалить:

Get-Content log.txt | Where-Object { $_ -notmatch "foo|bar" } | Set-Content log.txt

Как это работает:

  • Get-Content log.txt — загружает содержимое файла log.txt.
  • Where-Object { $_ -notmatch "foo|bar" } — фильтрует строки, пропуская только те, которые не содержат подстроки "foo" или "bar".
  • Set-Content log.txt — записывает отфильтрованные строки обратно в файл log.txt.

Примечания:

  • Убедитесь, что у вас есть резервная копия файла перед выполнением команды, так как она перезапишет оригинальный файл.
  • Вы можете добавить дополнительные подстроки в выражение -notmatch, разделяя их символом |. Например, для удаления строк с подстроками "foo", "bar" и "baz", команда будет выглядеть так:
Get-Content log.txt | Where-Object { $_ -notmatch "foo|bar|baz" } | Set-Content log.txt

Альтернативный способ с помощью команды findstr

Если по какой-то причине вы предпочитаете стандартные командные инструменты Windows, вы можете использовать findstr для создания нового файла без определенных строк:

  1. Откройте командную строку (cmd).
  2. Используйте команду, похожую на следующую:
findstr /V "foo bar" log.txt > new_log.txt

Как это работает:

  • findstr /V "foo bar" — ищет строки, не содержащие указанные подстроки.
  • log.txt — исходный файл.
  • > new_log.txt — вывод результатов в новый файл new_log.txt.

Эта команда создаст новый файл new_log.txt, в котором будут отсутствовать строки с подстроками "foo" и "bar".

Заключение

Таким образом, используя PowerShell или команду findstr, вы сможете легко удалить строки с определёнными подстроками из текстового файла. Эти методы являются бесплатными и не требуют установки дополнительного программного обеспечения.

Оцените материал
Добавить комментарий

Капча загружается...