格式运算符删除换行符

时间:2015-05-26 05:59:59

标签: powershell string-formatting

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

文件: sample1.txt

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

我运行以下命令:

$txt = gc Sample1.txt

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

我得到了输出:

foo: bar bar: foo Hello world

所有换行都在哪里?

3 个答案:

答案 0 :(得分:3)

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

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

如果您遇到PowerShell 2,则Raw参数不存在。您需要使用.NET File API:

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

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

答案 1 :(得分:1)

您还可以使用$ OFS自动变量来控制输出字段分隔符。在您的示例中,输出字段分隔符是一个空格,它是$ OFS的默认值。如果仔细观察输出,就可以看到该空间。

如果您将$ OFS设置为新行,如下所示:

$OFS = "`n"

您的输出应该包含换行符。此变量在某些其他情况下也很有用。

答案 2 :(得分:0)

gc返回一个没有任何返回的字符串数组。您需要使用`n。

指定返回值
PS:> "foo: {0}`nbar: {1}`nHello {2}" -f  "bar","foo","world"
foo: bar
bar: foo
Hello world
相关问题