格式运算符删除换行符

Format operator removes line breaks

我有一个这样的文本文件:

文件:sample1.txt

foo: {0}
bar: {1}
Hello {2}

我运行以下命令:

$txt = gc Sample1.txt

$txt -f "bar","foo","world"

我得到了输出:

foo: bar bar: foo Hello world

所有换行符都去哪儿了?

gc returns 没有任何 returns 的字符串数组。您需要指定 return 和 `n .

PS:> "foo: {0}`nbar: {1}`nHello {2}" -f  "bar","foo","world"
foo: bar
bar: foo
Hello world

Get-Content 自动按行将文件分成数组。使用 -Raw 标志将其保留为单个字符串:

$txt = gc Sample1.txt -Raw
$txt -f "bar","foo","world"

如果您卡在 PowerShell 2 上,则 Raw 参数不存在。您需要使用 .NET 文件 API:

$txt = [IO.File]::ReadAllText($(Convert-Path Sample1.txt))
$txt -f "bar","foo","world"

我使用了 Convert-Path,因为 .NET 文件 API 将默认解析相对于进程当前目录的路径,这与路径提供程序中的当前位置不同。

您还可以使用 $OFS 自动变量来控制输出字段分隔符。在您的示例中,输出字段分隔符是 space,这是 $OFS 的默认值。如果仔细查看输出,您可以看到 space。

如果设置$OFS为换行,如下:

$OFS = "`n"

你的输出应该有换行符。此变量在其他一些情况下也很有用。