Powershell заменяет потерянные разрывы строк - PullRequest
9 голосов
/ 28 апреля 2010

Я новичок в 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 Ответ

18 голосов
/ 28 апреля 2010

Ваша проблема здесь в том, что Get-Content возвращает string[] (с одним элементом для каждой строки в исходном файле), в то время как [regex]::Replace ожидает строку.Вот почему массив сначала будет преобразован в строку, что означает просто объединение всех элементов.

PowerShell предоставляет оператор -replace, который будет обрабатывать этот случай более изящно:Оператор -replace работает с каждым элементом массива индивидуально, если он применяется к массиву.

И да, он сопоставляет и заменяет регулярное выражение.Например:

> (Get-Content .\textfile.txt) -replace '(i|o|u)', '$1$1'
liinee
liinee
Soomee liinee
Mooree liinee heeree

Подробнее читайте здесь и здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...