50

给定test.txt包含:

test
message

我想结束:

testing
a message

我认为以下应该有效,但它没有:

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

如何查找并替换我发现的内容包含 CRLF?

4

5 回答 5

46

一个 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,并且它有效。当然,我不确切知道你是如何生成原始字符串的,所以我不知道里面有什么。

于 2008-11-28T15:49:19.797 回答
27

据我了解,Get-Content在通过管道滚动文本文件时消除了所有换行符/回车符。要执行多行正则表达式,您必须将字符串数组重新组合成一个巨大的字符串。我做类似的事情:

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

澄清:小文件只有人!请不要在您的 40 GB 日志文件上尝试此操作 :)

于 2008-12-01T22:22:02.717 回答
23

有了-Raw你应该得到你所期望的

于 2013-05-28T23:06:09.830 回答
2

如果要删除所有换行符并将它们替换为某个字符(例如逗号),则可以使用以下命令。

(Get-Content test.txt) -join ","

这是有效的,因为 Get-Content 返回行数组。您可以将其视为可用于多种语言的标记化功能。

于 2020-09-03T05:29:07.310 回答
0

"\\r\\n"您也可以使用powershell. 我在 servicenow 工具中使用了这个。

就我而言"\r\n",它不起作用,所以我尝试将此符号"\\r\\n"用作."\"powershell

于 2018-07-25T17:37:39.967 回答