powershell -split('')指定一个新行

时间:2016-08-30 22:36:32

标签: powershell scripting

Get-Content $user| Foreach-Object{
   $user = $_.Split('=')
   New-Variable -Name $user[0] -Value $user[1]}

我正在尝试处理脚本并将文本文件拆分为数组,根据每个新行拆分文件

我应该将“=”符号更改为

5 个答案:

答案 0 :(得分:27)

这取决于文本文件的确切编码,但[Environment]::NewLine通常可以解决问题。

"This is `r`na string.".Split([Environment]::NewLine)

输出:

  

这是

     

一个字符串。

答案 1 :(得分:5)

String.Split方法的问题在于它在给定字符串中的每个字符上拆分。因此,如果文本文件具有CRLF行分隔符,则将获得空元素。

更好的解决方案,使用-Split operator

"This is `r`na string." -Split "`r`n" #[Environment]::NewLine, if you prefer

答案 2 :(得分:2)

通过使用Split(String[], StringSplitOptions)方法重载,您可以使用String.Split方法对CRLF进行拆分,而不会以空元素结尾。

使用此方法有几种不同的方法。

选项1

$input.Split([string[]]"`r`n", [StringSplitOptions]::None)

这将拆分由CRLF表示的组合`r`n(回车和换行)字符串。 [StringSplitOptions]::None选项将允许Split方法返回数组中的空元素,但是如果所有行都以CRLF结尾,则不应有任何内容。

选项2

$input.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries)

这将在 回车符或换行符上分开。因此,该数组将以空元素和实际字符串结尾。 [StringSplitOptions]::RemoveEmptyEntries选项指示Split方法不包含空元素。

答案 3 :(得分:1)

到目前为止,给出的答案仅将Windows作为运行环境。如果您的脚本需要在多种环境(Linux,Mac和Windows)中运行,请考虑使用以下代码段:

$lines = $input.Split(
    @("`r`n", "`r", "`n"), 
   [StringSplitOptions]::None)

答案 4 :(得分:-1)

这篇文章还解释了很多关于回车和行尾的工作方式。 https://virot.eu/powershell-and-newlines/

有一些额外的空行问题,因此我找到了理解问题的解决方案。摘自 virot.eu:

<块引用>

那么什么构成了一个新行。棘手的部分来了,这取决于。 要理解这一点,我们需要转到字符的换行符。

换行符是 ASCII 字符 10。它在大多数编程语言中 通过写\n 转义,但在powershell 中它是`n。但 Windows 不是 只有一个字符的内容,Windows 也使用回车 这是 ASCII 字符 13。转义 \r。那么区别是什么呢? 换行将指针向下移动一行并回车 再次将其返回到左侧。如果您通过以下方式在 Windows 中存储文件 默认情况下,换行符首先存储为回车,然后 换行符 (\r\n)。当我们不使用任何参数时 split() 命令它将拆分所有空白字符,即 回车、换行、制表符等等。这就是为什么我们 有回车和换行时得到 5 个结果 供稿。