用powershell替换带有空格的新行

时间:2016-03-12 04:55:22

标签: powershell replace line newline

嗨,所以我一直在研究这一段时间,我尝试过的任何事都没有奏效。原谅我再问这个问题,但是我无法用powershell中的空格替换新行

$path = "$root\$filename"
Get-Content $path | % $_.Replace "`r`n"," " | Set-Content "$root\bob.txt" -Force

这是我在本网站上试图浏览的众多内容之一。

我正在使用powershell v3

4 个答案:

答案 0 :(得分:4)

Keith Hill's helpful answer很好地解释了您的代码问题并提供了可行的解决方案。

但是,Keith的解决方案在输出行添加了一个尾随空格(正如您自己的解决方案尝试所做的那样,如果它有效)。

这是一个更简单的替代方案,可以避免这个问题。

(Get-Content $path) -join ' ' | Set-Content -Force $root\bob.txt
  • (Get-Content $path)返回数组
  • 然后我们加入以形成单个输出字符串,元素分开每个空格 - 这个逻辑只将分隔符(空格)放在元素,而不是最后的元素。

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

答案 1 :(得分:3)

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

Get-Content $path -Raw | Foreach {$_ -replace "`r`n",' ' | 
    Set-Content $root\bob.txt -Force

-Raw参数指示Get-Content以单个字符串的形式读取文件内容。这将保留CRLFs

答案 2 :(得分:3)

假设您没有将$OFS更改为其默认值' '(单个空格):

[string](Get-Content $path) | Set-Content -Force $root\bob.txt

"$(Get-Content $path)" | Set-Content -Force $root\bob.txt

$OFS是一个自动变量,它在分隔符中指定将用于分隔数组的元素,并将其强制转换为[string]。它的默认值是一个空格,Get-Content将返回文件中的行数组,删除CRLF。将其转换为[string]然后在文件中生成以空格分隔的行字符串。

答案 3 :(得分:0)

尝试一下:

$NewStr = "";
Get-Content $Path -Raw | ForEach {$NewStr += "$_ "}
$NewStr | Set-Content DestinationPath -Force