给定test.txt包含:
test
message
我想结束:
testing
a message
我认为以下应该有效,但它没有:
Get-Content test.txt |% {$_-replace "t`r`n", "ting`r`na "}
如何查找并替换我发现的内容包含 CRLF?
给定test.txt包含:
test
message
我想结束:
testing
a message
我认为以下应该有效,但它没有:
Get-Content test.txt |% {$_-replace "t`r`n", "ting`r`na "}
如何查找并替换我发现的内容包含 CRLF?
一个 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
,并且它有效。当然,我不确切知道你是如何生成原始字符串的,所以我不知道里面有什么。
据我了解,Get-Content在通过管道滚动文本文件时消除了所有换行符/回车符。要执行多行正则表达式,您必须将字符串数组重新组合成一个巨大的字符串。我做类似的事情:
$text = [string]::Join("`n", (Get-Content test.txt))
[regex]::Replace($text, "t`n", "ting`na ", "Singleline")
澄清:小文件只有人!请不要在您的 40 GB 日志文件上尝试此操作 :)
有了-Raw
你应该得到你所期望的
如果要删除所有换行符并将它们替换为某个字符(例如逗号),则可以使用以下命令。
(Get-Content test.txt) -join ","
这是有效的,因为 Get-Content 返回行数组。您可以将其视为可用于多种语言的标记化功能。
"\\r\\n"
您也可以使用powershell
. 我在 servicenow 工具中使用了这个。
就我而言"\r\n"
,它不起作用,所以我尝试将此符号"\\r\\n"
用作."\"
powershell