Як вставити рядок в текстовий файл за допомогою 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
Тепер при запуску скрипта вихідна рядок буде замінена.
Ось як то так.
.