Подтвердить что ты не робот

Вставка содержимого в текстовый файл в Powershell

Я хочу добавить контент в середину текстового файла в Powershell. Я ищу конкретный шаблон, а затем добавляю содержимое после него. Обратите внимание, что это находится в середине файла.

В настоящее время у меня есть:

 (Get-Content ( $fileName )) | 
      Foreach-Object { 
           if($_ -match "pattern")
           {
                #Add Lines after the selected pattern
                $_ += "`nText To Add"
           }
      }
  } | Set-Content( $fileName )

Однако это не работает. Я предполагаю, что $_ является неизменным или потому, что оператор + = не модифицирует его правильно?

Как добавить текст в $_, который будет отображаться в следующем вызове Set-Content?

4b9b3361

Ответ 1

Просто выведите дополнительный текст, например.

(Get-Content $fileName) | 
    Foreach-Object {
        $_ # send the current line to output
        if ($_ -match "pattern") 
        {
            #Add Lines after the selected pattern 
            "Text To Add"
        }
    } | Set-Content $fileName

Вам может не понадобиться дополнительная `` n`, поскольку строка PowerShell будет завершать каждую строку для вас.

Ответ 2

Как насчет этого:

(gc $fileName) -replace "pattern", "$&`nText To Add" | sc $fileName

Я думаю, что это довольно прямолинейно. Единственной неочевидной вещью является "$ &", которая относится к тому, что соответствовало "шаблону". Дополнительная информация: http://www.regular-expressions.info/powershell.html

Ответ 3

Эта проблема может быть решена с помощью массивов. Текстовый файл представляет собой массив строк. Каждый элемент представляет собой строку текста.

$FileName = "C:\temp\test.txt"
$Patern = "<patern>" # the 2 lines will be added just after this pattern 
$FileOriginal = Get-Content $FileName

<# create empty Array and use it as a modified file... #>

[String[]] $FileModified = @() 

Foreach ($Line in $FileOriginal)
{    
    $FileModified += $Line

    if ($Line -match $patern) 
    {
        #Add Lines after the selected pattern 
        $FileModified += "add text'
        $FileModified += 'add second line text'
    } 
}
Set-Content $fileName $FileModified