2008-11-28 2 views

ответ

29

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

16

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

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

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

+0

недурно для этого объяснения – 2017-07-21 22:52:46

14

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

+1

Стоит отметить, что это не доступно с PS v2, но если вы pipe to Out-String, вы получите тот же эффект. – Robin 2014-05-30 15:49:15

Смежные вопросы