#powershell
#powershell
Вопрос:
Я использую следующий powershell для поиска элемента строки в файле и выбора следующих 5 строк, которые соответствуют совпадению:
Get-Content -Path C:testfile.txt | Where-Object {$_ -match "###"} | Select-Object -Last 5
Это возвращает только первую строку каждого соответствия. Ожидаемым результатом будет первая строка и 5 последующих.
Ответ №1:
Select-String является хорошим кандидатом для этого из-за -Context
параметра:
Select-String -Path C:testfile.txt -Pattern '###' -Context 0,5 |
Foreach-Object { $_.Line,$_.Context.PostContext}
-Context
Параметр принимает два значения. Первая — это количество строк до совпадения. Второе — это количество строк после совпадения. Технически вы можете использовать -Context 5
в этом случае, потому что к строкам после совпадения применяется одно единственное число.
Поскольку Select-String
возвращает MatchInfo
объект. Вам нужно будет получить доступ к Line
свойству, чтобы отобразить строку, содержащую текущее совпадение. Context
Свойство — это MatchInfoContext
объект, который содержит Precontext
и Postcontext
свойства. Эти свойства содержат строки до и после сопоставления соответственно.
Ответ №2:
Get-Content -Path C:tempfile.txt | Where-Object {$_ -match "###"} | Select-Object -Index 0,4
В результате получаем 1-ю и 5-ю строки