假设下面的简单文件替换:
get-content db.cfg | %{$_ -replace 'a', 'b'} | out-file db.cfg.new -encoding default
out-file自动使用\ r \ n作为行分隔符。有没有办法强制使用不同的分隔符(如\ n)?
我正在寻找一个优雅的解决方案。除此之外,人们当然可以将整个文件构建为内存中的字符串,然后将其写出来。
答案 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来解决我的用例来执行替换。对于这样一个基本问题,我觉得没有办法解决这个问题。