Получить следующие 5 строк после Where-Object

#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-ю строки