Есть задача вставить текстовую строку в определенное место текстового файла. Сделать это можно множеством различных способов, в том числе и с помощью 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 Комментарии