Как вставить строку в текстовый файл с помощью PowerShell

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

Итак, в папке C:\temp находится текстовый файл file.txt. Для начала выведем его содержимое командой:

Get-Content file.txt


вывод содержимого файла

В файле всего 5 строк и нам необходимо вставить дополнительную строку между третьей и четвертой. Действовать будем следующим образом:

Сначала возьмем исходный файл и поместим его содержимое в переменную. Команда Get-Content выгружает текстовый файл в виде массива, в котором элементами являются строки. Таким образом в переменной $FileOriginal мы получим массив строк:

$FileName = ″C:\temp\file.txt″
$FileOriginal = Get-Content $FileName

Затем создадим еще один массив строк, пустой:

[String[]]$FileModified = @()

Строку, которую необходимо вставить, помещаем в переменную:

[String]$string = ″String three and half.″

Теперь берем исходный массив $FileOriginal и в цикле построчно передаем его в новый массив $FileModified, попутно проверяя каждую строку.  Если строка соответствует заданному условию, то после нее вставляется дополнительная строка:

Foreach ($Line in $FileOriginal){
$FileModified += $Line
if ($Line -match ″three″) {$FileModified += $string}
}

Ну и в заключение мы берем получившийся массив и записываем его в исходный файл, перезаписывая его.

Set-Content $fileName $FileModified -Force

Все это сохраняем в виде скрипта, запускаем его и получаем вот такой результат.


вставка одной строки

Если требуется вставить несколько строк, то можно немного изменить скрипт. С помощью конструкции Here-Strings добавим несколько строк в переменную $strings и уже эту переменную будем вставлять в текст:

$FileName = ″C:\temp\file.txt″
$FileOriginal = Get-Content $FileName
[String[]]$FileModified = @()

$strings = @″
String three and quarter.
String three and half.
″@

Foreach ($Line in $FileOriginal){
$FileModified += $Line
if ($Line -match ″three″) {$FileModified += $strings}
}
Set-Content $fileName $FileModified -Force

Получится примерно так.


вставка нескольких строк

И еще один возможный случай, когда надо не просто вставить новый текст, а заменить существующий.  Для этого можно воспользоваться свойством Replace строки. Еще раз изменим скрипт:

$FileName = ″C:\temp\file.txt″
$FileOriginal = Get-Content $FileName
[String[]]$FileModified = @()
[String]$string = ″String three and half.″

Foreach ($Line in $FileOriginal){

if ($Line -match ″three″) {

$FileModified += $Line.Replace($Line, $string)

} else {

$FileModified += $Line

}
}

Set-Content $fileName $FileModified -Force

Теперь при запуске скрипта исходная строка будет заменена.


замена строки

Вот как то так.

Отправить комментарий

0 Комментарии