使用Powershell替换空间中的新行

Pat*_*ney 4 powershell replace newline line

嗨,我已经研究了一段时间,但我尝试过的任何方法都没有用。原谅我再次提出这个问题,但我无法在Powershell中用空格替换新行

$path = "$root\$filename"
Get-Content $path | % $_.Replace "`r`n"," " | Set-Content "$root\bob.txt" -Force
Run Code Online (Sandbox Code Playgroud)

这是我尝试浏览此网站时尝试过的众多事情之一。

我正在使用Powershell v3

Kei*_*ill 5

这里有几个问题。首先,按照您调用 Get-Content 的方式,通过管道发送的字符串中永远不会有换行符。这是因为 Get-Content 的默认工作方式是在换行符上拆分文件并为每一行输出一个字符串。其次,您的 Foreach 命令需要 {} 围绕替换命令。尝试这个:

Get-Content $path -Raw | Foreach {$_ -replace "`r`n",' '} | 
    Set-Content $root\bob.txt -Force
Run Code Online (Sandbox Code Playgroud)

-Raw参数指示Get-Content将文件内容作为单个字符串读取。这将保留CRLFs.


mkl*_*nt0 5

Keith Hill的有用答案很好地解释了您的代码存在的问题,并提供了可行的解决方案。

但是,Keith的解决方案在输出行上增加了尾随空格(如果您自己的解决方案尝试了,就可以这样做)。

这是一个避免此问题的更简单的选择。

(Get-Content $path) -join ' ' | Set-Content -Force $root\bob.txt
Run Code Online (Sandbox Code Playgroud)
  • (Get-Content $path)返回行数组
  • 然后我们将其连接以形成单个输出字符串,每个元素之间用空格分隔 -此逻辑仅元素之间放置分隔符(空格),而不是在末尾。

请注意,这和Keith的答案都需要将整个输入文件读入内存,这对于大文件可能存在问题。