Похоже, вы разбиваете и заменяете его, чтобы получить содержимое файла в отдельных строках. Однако Get-Content делает это по умолчанию. Более того, в вашем коде $ line & $ content будут иметь одинаковые значения.
Я даю этот шанс, но я думаю, что вы пытаетесь сделать это, посмотрев вперед через массив строк, чтобы найти группу имя, которое может появиться в какой-то произвольный момент после того, как вы обнаружите «утверждающий».
Я вручную напечатал файл, как довольно хорошее совпадение с тем, что вы продемонстрировали в пересмотренном вопросе. Придумали ниже. Опять же, это не в моей голове, но, похоже, работает так, как вы продиктовали выше.
Примечание: я добавил массив $ Groups только для того, чтобы имитировать то, что вы сказали в своем последнем комментарии.
$File = 'C:\Temp\InputTest.txt'
$Groups = @( 'Group1','Group2','Group3','Group4','Group5' )
$Lines = Get-Content $File
$Output =
For( $i = 0; $i -lt $Lines.Length; ++$i )
{
If( $Lines[$i] -match '^# approver' )
{
$Approver = $Lines[$i].split(':').Trim()[1]
# Need to ignore lines in between
:LookForGroup Do
{
++$i
ForEach ( $Group in $Groups )
{
If( $Lines[$i] -match "^$Group" )
{
$Approver + ' ' + $Lines[$i]
++$i
}
ElseIf( $Lines[$i] -match "(^$|\r\n|^######)")
{# Looking for a signal to move on...
Remove-Variable Approver #Maybe don't need this???
Break LookForGroup
}
}
} While($true)
}
}
#This will display the output, you can do something else with it...
$Output
То, что я делаю, использует $ i вроде курсора. Как только линия утверждающего обнаружена, я go проходит через каждую группу, чтобы увидеть, соответствует ли строка названию группы. Если да, я выводю утверждающего и имя группы, как вы указали. Затем я увеличиваю $ i, перемещая одну строку вперед в файле. Если строка не соответствует группе, я проверяю некоторые характеристики, чтобы убедиться, что мы достигли конца раздела (как определено в вашем примере). Если да, я сломаю Do l oop, что приведет к продолжению For l oop, обратите внимание: $ i останется таким, как мы его установим ...
Я признаю, что это немного Kludge, дайте мне знать ...