Как заменить символы новой строки с помощью PowerShell? - PullRequest
34 голосов
/ 28 ноября 2008

Дано test.txt , содержащее:

test
message

Я хочу закончить с:

testing
a message

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

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

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

Ответы [ 4 ]

34 голосов
/ 28 ноября 2008

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, и это сработало. Конечно, я не знаю точно, как вы сгенерировали оригинальную строку, поэтому я не знаю, что там.

21 голосов
/ 02 декабря 2008

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

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

Разъяснение: маленькие файлы только люди! Пожалуйста, не пытайтесь сделать это в 40 ГБ файле журнала:)

16 голосов
/ 29 мая 2013

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

0 голосов
/ 25 июля 2018

Вы можете использовать "\\r\\n" также для новой строки в powershell. Я использовал это в инструменте servicenow.

В моем случае "\r\n" s не работает, поэтому я попытался "\\r\\n" как "\", этот символ работает как escape-символ в powershell.

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