PowerShell 不删除换行符

PowerShell not removing new line characters

环境:Windows 10 pro 20H2,PowerShell 5.1.19041.1237

.txt 文件中,我的以下 PowerShell 代码没有用 " " 替换换行符。 问题:我可能在这里遗漏了什么,我们怎样才能让它发挥作用?

C:\MyFolder\Test.txt 文件:

This is first line.
This is second line.
This is third line.
This is fourth line.

期望的输出[用“”字符替换换行符后]:

This is first line. This is second line. This is third line. This is fourth line.

PowerShell 代码:

PS C:\MyFolder\test.txt> $content = get-content "Test.txt"
PS C:\MyFolder\test.txt> $content = $content.replace("`r`n", " ")
PS C:\MyFolder\test.txt> $content | out-file "Test.txt"

备注

如果我替换文件中的一些其他字符,上面的代码可以正常工作。例如,如果我将上面代码的第二行更改为 $content = $content.replace("third", "3rd"),则代码成功地将上面文件中的 third 替换为 3rd

您需要将 -Raw 参数传递给 Get-Content. By default, without the Raw parameter, content is returned as an array of newline-delimited strings.

Get-Content "Test.txt" -Raw

引用文档,

-Raw

Ignores newline characters and returns the entire contents of a file in one string with the newlines preserved. By default, newline characters in a file are used as delimiters to separate the input into an array of strings. This parameter was introduced in PowerShell 3.0.

最简单的方法是使用-Raw开关,然后对其进行替换,但要利用[=12]这一事实=] 为您拆分换行符上的内容。

接下来要做的就是用 space 个字符加入数组。

(Get-Content -Path "Test.txt") -join ' ' | Set-Content -Path "Test.txt"

至于你尝试过的:

通过使用 Get-Content 不使用 -Raw 开关,cmdlet returns 一个字符串数组,在换行符上拆分。
这意味着结果字符串中不再有 没有 换行符需要替换,所需要的只是 'stitch' 行和 space 字符。

如果您 使用 -Raw 开关,cmdlet returns 一个包含换行符的单个多行字符串。
在你的情况下,你需要自己进行拆分或替换,为此,不要使用字符串方法 .Replace,而是使用带有搜索字符串的正则表达式运算符 -split-replace '\r?\n'.

其中的问号确保您在 Windows 格式 (CRLF) 中拆分换行符,但也适用于 *nix 格式 (LF)。