Вопрос или проблема
Я стараюсь разобраться в большом лог-файле. Там есть несколько повторяющихся строк, которые я хотел бы удалить, чтобы сделать текст более читабельным.
Я могу сделать это с помощью Notepad++, поставив закладки на все строки, содержащие такие подстроки, а затем удалив все отмеченные строки, но предпочел бы инструмент командной строки.
Прежде чем я напишу быстрое скрипт на Python, есть ли что-то существующее?
Должно быть бесплатно. Должна быть встроенная команда или портативное приложение, так как я ограничен и не могу устанавливать новое программное обеспечение.
Просто removelines log.txt foo
или removelines log.txt foo bar
, чтобы удалить строки, содержащие “foo” или “foo”, или “bar”. Я предпочел бы не использовать регулярные выражения по … причинам
Ответ или решение
Для удаления строк из текстового файла, содержащих определенные подстроки, вы можете воспользоваться встроенными средствами Windows. Вот шаги, которые позволят вам добиться желаемого результата с помощью командной строки.
Использование команды PowerShell
PowerShell позволяет легко обрабатывать текстовые файлы. Вот пример команды, которая удалит строки, содержащие указанные подстроки (например, "foo" и "bar"):
-
Откройте PowerShell. Для этого нажмите
Win + R
, введитеpowershell
и нажмитеEnter
. -
Используйте следующую команду, заменив
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
для создания нового файла без определенных строк:
- Откройте командную строку (cmd).
- Используйте команду, похожую на следующую:
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
, вы сможете легко удалить строки с определёнными подстроками из текстового файла. Эти методы являются бесплатными и не требуют установки дополнительного программного обеспечения.