Вставка содержимого в текстовый файл в Powershell
Я хочу добавить контент в середину текстового файла в Powershell. Я ищу конкретный шаблон, а затем добавляю содержимое после него. Обратите внимание, что это находится в середине файла.
В настоящее время у меня есть:
(Get-Content ( $fileName )) |
Foreach-Object {
if($_ -match "pattern")
{
#Add Lines after the selected pattern
$_ += "`nText To Add"
}
}
} | Set-Content( $fileName )
Однако это не работает. Я предполагаю, что $_ является неизменным или потому, что оператор + = не модифицирует его правильно?
Как добавить текст в $_, который будет отображаться в следующем вызове Set-Content?
Ответы
Ответ 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