Powershell заменяет потерянные разрывы строк
Я новичок в PowerShell. У меня есть простой скрипт powershell, который просто заменяет текст, но я обнаружил, что регулярное выражение заменяет мой многострочный источник данных в однострочный текст при выводе. Я хочу, чтобы разрывы строк были сохранены. Вот глупая версия сценария.
$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
Я что-то упустил очевидное?
Спасибо фадриан
1 ответ
Ваша проблема здесь в том, что Get-Content
возвращает string[]
(с одним элементом для каждой строки в исходном файле) [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