我的问题非常简单,我对PowerShell很新,但我只是想知道是否有一种简单的方法可以按行分割字符串,并将每行的内容添加到单独的数组条目中。
答案 0 :(得分:3)
PowerShell的帮助系统包含许多有用的信息(类型help
以便开始使用。)
使用-split
运算符拆分字符串。 PowerShell使用反引号字符(`
)表示转义码,因此它看起来像这样:
$str -split "`n"
例如,我们可以定义一个字符串并在该字符串上调用Length
以获取长度(以字符为单位):
PS C:\> $str = "One`nTwo`nThree"
PS C:\> $str
One
Two
Three
PS C:\> $str.Length
13
现在我们将创建一个数组,其中该字符串被分成行并获得结果数组的长度。请注意,在PowerShell中,每行显示一个项目,因此它的显示方式与此前的结果类似!
PS C:\> $arr = $str -split "`n"
PS C:\> $arr
One
Two
Three
PS C:\> $arr.Length
3
PowerShell最初可能会令人困惑。一个技巧是将数据结构转换为JSON,看看在你习惯它之前会发生什么。
PS C:\> $str | ConvertTo-Json -Compress
"One\nTwo\nThree"
PS C:\> $arr | ConvertTo-Json -Compress
["One","Two","Three"]
答案 1 :(得分:2)
补充Don Cruickshank's helpful answer:
"`n"
扩展为仅 LF字符( Unix -style ,Unicode代码点U+000A
),但您的输入可能会使用 CRLF序列("`r`n"
, Windows -style ,Unicode代码点U+000D
和{{ 1}})作为换行符(换行符)。
虽然给定平台的本机换行符[sequence]反映在U+000A
中,但无法保证给定输入(文件)的换行使用它。
值得注意的是,脚本嵌入在这里 - 字符串(例如,[Environment]::Newline
)使用保存封闭脚本文件的任何换行格式 - 当读取脚本执行时,PowerShell接受两者 LF - 仅支持所有平台上的CRLF文件。
因此,通过换行将字符串拆分为行的最健壮的形式是以下习语,它利用了@"<newline>...<newline>"@
运算符默认接受的事实正则表达式作为分割标准:
-split
以上处理输入正确地仅包含LF( $str -split '\r?\n' # returns array of lines contained in $str
)和CRLF(\n
)换行符,
因为\r\n
匹配每个\r?\n
(LF)可选(\n
)前面有?
(CR)。