Как заменить новые строки с помощью PowerShell?
Данный файл test.txt содержит:
test
message
Я хочу в итоге:
testing
a message
Я думаю, что следующее должно работать, но это не так:
Get-Content test.txt |% {$_-replace "t`r`n", "ting`r`na "}
Как я могу найти и заменить, где то, что я нахожу, содержит CRLF?
Ответы
Ответ 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
вы должны получить то, что ожидаете