정규식 패턴을 기반으로 Powershell의 특정 줄 위와 아래에 줄을 추가하는 방법은 무엇입니까?

정규식 패턴을 기반으로 Powershell의 특정 줄 위와 아래에 줄을 추가하는 방법은 무엇입니까?
03,201779,,01354,73923309,,,TEST2,7962753,,,0343,5087632,,/#end of line
04,399,777873,,,,text234,,,,/ 
33,TEST1,,,0343,,93493,,,343,,,,TEST3,,,,,,/
37,TEST37,text
49,24605597,6,343,343,343,,,3434,,,/

내 .txt 파일에는 03 레코드에서 시작하여 49 레코드에서 끝나는 50,000개의 섹션이 있습니다.

I want to add a record say:- "02, 33, TEST02,,,,022,,,99/  ABOVE all 03 records.
I want to add a record say:- "50, 3434, TEST50,,,034,,,343/  BELOW all 49 records.

이 코드는 작동하지 않습니다. 도와주세요. 이것은 매우 중요합니다.. 긴급한 작업을 위해 이 작업을 수행해야 합니다.

$FileName = "C:\testdata\file.txt"
$Pattern = "[03,]"
[System.Collections.ArrayList]$file = Get-Content $FileName
$insert = @()

for ($i=0; $i -lt $file.count; $i++) {
  if ($file[$i] -match $pattern) {
    $insert += $i-1 #Record the position of the line before this one
  }
}

#Now loop the recorded array positions and insert the new text
$insert | Sort-Object -Descending | ForEach-Object { $file.insert($_,"02, 33, TEST02,,,,022,,,99/") }

Set-Content $FileName $file

답변1

다음 코드를 사용할 수 있습니다.

$fileName = "C:\testdata\file.txt"
(Get-Content $fileName) |
    Foreach-Object {
        if ($_.StartsWith("03,")) {
            Write-Output "02, 33, TEST02,,,,022,,,99/"
        }
        Write-Output $_                 # send the current line to output
        if ($_.StartsWith("49,")) {
            Write-Output "50, 3434, TEST50,,,034,,,343/"
        }
    }

관련 정보