3

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

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

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

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

4

3 回答 3

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()

它不像单行那样流畅,但至少它很容易阅读,而且您仍然一次一行地流式传输文件。

于 2012-04-18T18:26:27.047 回答
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)
于 2012-04-04T03:44:39.080 回答
0

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

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

我通过使用Swiss File Knife而不是 PowerShell 来执行替换解决了我的用例。为这样一个基本问题实施解决方法感觉不对。

于 2012-04-18T17:59:31.943 回答