如何控制PowerShell管道中的行分隔符?

时间:2012-04-04 00:41:49

标签: powershell

假设下面的简单文件替换:

get-content db.cfg | %{$_ -replace 'a', 'b'} | out-file db.cfg.new -encoding default

out-file自动使用\ r \ n作为行分隔符。有没有办法强制使用不同的分隔符(如\ n)?

我正在寻找一个优雅的解决方案。除此之外,人们当然可以将整个文件构建为内存中的字符串,然后将其写出来。

3 个答案:

答案 0 :(得分:3)

您可以使用StreamWriter而不是Out-File cmdlet,如下所示:

$writer = [system.io.file]::CreateText("\path\to\db.cfg.new")
$writer.NewLine = "`n"
get-content db.cfg | %{$_ -replace 'a', 'b'} | % { $writer.WriteLine($_)}
$writer.Close()

它并不像单行一样光滑,但至少它很容易阅读,你仍然可以一次一行地传输文件。

答案 1 :(得分:0)

创作后转换怎么样?

$fileToConvert = "db.cfg.new"
$filName = "db.cfg"

$text = ([IO.File]::ReadAllText($fileToConvert) -replace "`r`n?", "`n")
$encoding = New-Object System.Text.ASCIIEncoding
[IO.File]::WriteAllText("$filename", $text, $encoding)

答案 2 :(得分:0)

在管道末端使用out-file时,似乎无法控制行分隔符。

但是,当然,你可以在内存中将文件构建为字符串,或者在保存文件后转换行结尾。

我通过使用Swiss File Knife而不是PowerShell来解决我的用例来执行替换。对于这样一个基本问题,我觉得没有办法解决这个问题。