У нас есть большой (~ 100 МБ) текстовый файл. Нам нужно удалить все строки, которые содержат определенные фразы. Я хотел бы использовать PowerShell для замены текущего метода, который использует windows grep и является файлом .bat.
Проблема в том, что существует около 95 ключевых фраз. любая строка, содержащая любую из этих фраз, должна быть удалена.
Список ключевых фраз содержится в "badPhrases.txt"
, строка разделена как обычный текстовый файл. Их около 100, я не хочу включать их в жестко запрограммированный список, но я сделаю это, если придется.
Я пробовал пару / несколько сравнений, но мой вывод всегда БОЛЬШЕ, чем мой оригинальный входной файл! Или 0k (пусто). Что я делаю неправильно? Я подозреваю, что проблема в фильтре Where-Object
, но я могу ошибаться.
[string[]]$arrayFromFile = Get-Content -Path '.\badPhrases.txt'
get-content ".\inputfile.txt" | Where-Object {$_ -notlike $arrayFromFile} | Out-File ".\clean_data.txt" -Force
Я пробовал -notlike, -notin -notmatch и -notcontains (при переворачивании массива и объекта ввода вокруг таким образом, что казалось логичным). Например ...
Where-Object {$arrayFromFile -notin $_}
....
Where-Object {$_ -notcontains $arrayFromFile}
....
Where-Object {$_ -notlike arrayFromFile}
Я искал stackOverflow и гуглил вокруг, и я не могу найти ни одной ссылки, которая не является мертвой, которая касается именно этого варианта использования. Была ссылка "Эй, парень сценариев", но ... ссылка была мертва.