Подтвердить что ты не робот

Как заменить новые строки с помощью PowerShell?

Данный файл test.txt содержит:

test
message

Я хочу в итоге:

testing
a message

Я думаю, что следующее должно работать, но это не так:

Get-Content test.txt |% {$_-replace "t`r`n", "ting`r`na "}

Как я могу найти и заменить, где то, что я нахожу, содержит CRLF?

4b9b3361

Ответ 1

A CRLF - это два символа, конечно, CR и LF. Однако `n состоит из обоих. Например:

PS C:\> $x = "Hello
>> World"

PS C:\> $x
Hello
World
PS C:\> $x.contains("`n")
True
PS C:\> $x.contains("`r")
False
PS C:\> $x.replace("o`nW","o There`nThe W")
Hello There
The World
PS C:\>

Я думаю, что у вас проблемы с `r. Мне удалось удалить `r из вашего примера, использовать только `n, и он сработал. Конечно, я точно не знаю, как вы создали исходную строку, поэтому я не знаю, что там.

Ответ 2

В моем понимании Get-Content устраняет все символы новой строки/каретки, когда он переводит ваш текстовый файл по конвейеру. Чтобы выполнять многострочные регулярные выражения, вы должны повторно объединить свой массив строк в одну гигантскую строку. Я делаю что-то вроде:

$text = [string]::Join("`n", (Get-Content test.txt))
[regex]::Replace($text, "t`n", "ting`na ", "Singleline")

Уточнение: маленькие файлы только люди! Пожалуйста, не пробуйте это в вашем 40-битном файле журнала:)

Ответ 3

С -Raw вы должны получить то, что ожидаете