如何使用PowerShell替换换行符?

时间:2008-11-28 14:54:53

标签: powershell

鉴于 test.txt 包含:

test
message

我想最终:

testing
a message

我认为以下内容应该有效,但事实并非如此:

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

如何找到并替换我找到的包含CRLF的地方?

5 个答案:

答案 0 :(得分:34)

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

答案 1 :(得分:20)

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

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

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

答案 2 :(得分:16)

使用-Raw,您应该得到您期望的结果

答案 3 :(得分:1)

如果要删除所有换行符,并用某些字符替换(例如逗号),则可以使用以下内容。

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

这行得通,因为Get-Content返回行数组。您可以将其视为支持多种语言的令牌化功能。

答案 4 :(得分:0)

您也可以将"\\r\\n"用于powershell的新行。我已经在servicenow工具中使用了它。

在我的情况下,"\r\n"无法正常工作,因此我尝试将"\\r\\n"设置为"\",此符号在powershell中用作转义字符。