Powershell 格式运算符删除换行符

Powershell 格式运算符删除换行符,powershell,string-formatting,Powershell,String Formatting,我有这样一个文本文件: 文件:sample1.txt 我运行以下命令: $txt = gc Sample1.txt $txt -f "bar","foo","world" 我得到了输出: foo: bar bar: foo Hello world 所有换行符都到哪里去了?gc返回一个字符串数组,没有任何返回。您需要使用'n'指定返回值 PS:> "foo: {0}`nbar: {1}`nHello {2}" -f "bar","foo","world" foo: bar bar:

我有这样一个文本文件:

文件:sample1.txt

我运行以下命令:

$txt = gc Sample1.txt

$txt -f "bar","foo","world"
我得到了输出:

foo: bar bar: foo Hello world

所有换行符都到哪里去了?

gc返回一个字符串数组,没有任何返回。您需要使用'n'指定返回值

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

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

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

获取内容自动将文件按行拆分为数组。使用-Raw标志将其保留为单个字符串:

$txt = gc Sample1.txt -Raw
$txt -f "bar","foo","world"
如果您卡在PowerShell 2上,则原始参数不存在。您需要使用.NET文件API:

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

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

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

$txt = gc Sample1.txt -Raw
$txt -f "bar","foo","world"
如果您卡在PowerShell 2上,则原始参数不存在。您需要使用.NET文件API:

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

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

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

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

$OFS = "`n"

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

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

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

$OFS = "`n"

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

怎么做?字符串来自一个文件。它已经有了所有的换行符…甚至[string]::格式化失败…好的,那么gc的替代方案是什么呢?这对您很有用。获取内容sample1.txt-Raw-f bar、foo、worldHow?字符串来自一个文件。它已经有了所有的换行符…甚至[string]::格式化失败…好的,那么gc的替代方案是什么呢?这对您很有用。获取Content sample1.txt-Raw-f bar、foo、worldAny powershell 2备选方案?@deocwalk不直接获取。您必须使用.NETAPI。查看我的编辑。是否有powershell 2替代方案?@deocwalk不直接查看。您必须使用.NETAPI。查看我的编辑。这里肯定是最正确的答案,尽管我可能选择$OFS=[System.Environment]::NewLine这里肯定是最正确的答案,尽管我可能选择$OFS=[System.Environment]::NewLine