Powershell .split并在保持分割格式的同时附加

时间:2016-12-29 19:52:15

标签: string powershell split

您好我的问题是如何保持已运行.split的字符串的格式。我想要的是什么

.stack-work

我知道我是否对字符串执行拆分,例如

$ stack build
$ stack build --profile

然而,当我试图使它成为我想要将上面的分割附加到字符串

$test="a.b.c.d.e"
$test2="abc"
#split test
#append split to test2
#desired output
abc
a
b
c
d
e

$test="a.b.c.d.e"
$splittest=$test.split(".")
$splittest
#output
a
b
c
d
e

有没有办法在保持这种拆分格式的同时将拆分字符串附加到另一个字符串,或者我必须循环遍历拆分字符串并将其逐个附加到$ test2字符串。

$test2="abc"
$test2+$splittest
#output
abca b c d e

我不想使用foreach方法,因为它似乎会减慢我正在处理的脚本,这需要在小端上分割和附加超过500k次的文本。

1 个答案:

答案 0 :(得分:2)

您所看到的是PowerShell运算符重载解析的效果。

当PowerShell看到+时,需要确定+是否表示总和(1 + 1 = 2),连接(1 + 1 = "11")或添加(1 + 1 = [1,1])在给定的背景下。

通过查看左侧参数的类型来实现,并尝试将右侧参数转换为所选运算符重载所期望的类型。

当您按所需顺序使用+时,字符串值位于左侧,因此会导致字符串连接操作。

有多种方法可以将字符串添加到现有数组中:

# Convert scalar to array before +
$newarray = @($abc) + $splittest

# Flatten items inside an array subexpression
$newarray = @($abc;$splittest)

现在你所要做的就是用换行符加入字符串:

$newarray -join [System.Environment]::NewLine

或者您可以将输出字段分隔符($OFS)更改为换行符并隐式加入:

$OFS = [System.Environment]::NewLine
"$newarray"

最后,您可以将数组传递给Out-String,但这会为整个字符串添加一个尾随换行符:

@($abc;$splittest) |Out-String