Поэтому у меня есть несколько больших текстовых файлов, которые мне нужно отсортировать, и удалить все вхождения строк, которые содержат данное ключевое слово. В общем, если у меня есть эти строки:
Это не тест
Это тест
Может быть тест
Определенно не тест
И я запускаю скрипт с 'not', мне нужно полностью удалить строки 1 и 4.
Я пытался с:
PS C:\Users\Admin> (Get-Content "D:\Logs\co2.txt") |
Foreach-Object {$_ -replace "3*Program*", ""} |
Set-Content "D:\Logs\co2.txt"
но он заменяет только «Программу», а не всю строку.
windows-7
powershell
script
Карел
источник
источник
Set-Content
? Я не верю, чтоSet-Content
это замена для заменыOut-File
.Get-Content .\in.txt | Where-Object {$_ -notmatch 'not'} | Set-Content out.txt
Out-File - это в основном Set-Content, но он выполняет ввод через форматирование по умолчанию вместо простого преобразования строк.Это будет работать:
источник
Вы также можете использовать 'Select-String' с опцией -notmatch:
источник
Мне просто нужно было заставить это работать и придумал следующее:
Ключевым моментом является то, что для 'Where-Object', использующего блок скрипта (как обозначено фигурными скобками), требуется объявить переменную в событии создания блока скрипта, следовательно,
линия.
Структурируя его таким образом, можно создать функцию, передать ей текстовую строку для частичного совпадения, выполнить создание блока сценария с переданным значением и заставить его работать правильно.
Ответы выше не правильно объясняют, как передать значение, которое будет заменено в переменной.
источник