Я - новичок в powershell. У меня есть простой powershell сценарий, которые просто заменяют текст, но я нашел, что замена regex превращает мой многострочный источник данных в однострочный текст, когда вывод производится. Я хочу, чтобы разрывы строки были сохранены. Вот являются немые вниз версией сценария.
$source=(Get-Content textfile.txt)
$process1 = [regex]::Replace($source, "line", "line2")
$process1 | out-file -encoding ascii textfile2.txt
Можно создать тестовый вызов файла textfile.txt с простыми строками как это для тестирования его
line
line
Some line
More line here
Я пропустил что-то очевидное?
Спасибо, Fadrian
Ваша проблема в том, что Get-Content
возвращает строку []
(с одним элементом для каждой строки в исходном файле), а [regex] :: Replace
ожидает строку. Вот почему массив сначала будет преобразован в строку, что просто означает объединение всех элементов в одну кучу.
PowerShell предоставляет оператор -replace
, который будет более изящно обрабатывать этот случай:
(Get-Content .\textfile.txt) -replace 'line', 'line2' |
out-file -encoding ascii textfile2.txt
Оператор -replace
работает с каждым элементом массива индивидуально, если он применяется к массиву .
И да, он выполняет поиск и замену регулярных выражений. Например:
> (Get-Content .\textfile.txt) -replace '(i|o|u)', '$1$1'
liinee
liinee
Soomee liinee
Mooree liinee heeree