Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

Як вставити рядок в текстовий файл за допомогою 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

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



Ось як то так.

.