Замена Powershell теряет разрывы строки

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

10
задан Fadrian Sudaman 28 April 2010 в 03:17
поделиться

1 ответ

Ваша проблема в том, что 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

Подробнее здесь и здесь .

20
ответ дан 3 December 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: