Powershell:将下一行与当前行合并

Powershell: Combine next line with current line

我正在寻找所需的输出,如下所示。主要概念是将下一行与当前行连接起来,如果以字符结尾,则结果为一行。

谢谢

$file = 'textfile.txt'
$reportObject = @() 

foreach ($line in $file) {

  $content = [IO.File]::ReadAllLines($file)

  for ($i = 0; $i -lt $content.count; $i++) {

    $line = $content[$i]

    if ($line.StartsWith("Users")) {

      $a = 0

      while ($content[$i + $a].EndsWith("\")) {                                                #"

        $reportObject += $content[$i + $a]

        $a++

      }

      $reportObject += $content[$i + $a]

    }

  }
  $reportObject
}
# Use
#   $reportObject = (Get-Content ...
# to assign the resulting array of lines to your variable.
(Get-Content -Raw textfile.txt) -replace '\\r?\n' -split '\r?\n'
    由于使用 Get-Content-Raw 开关,
  • Get-Content -Raw textfile.txt 将整个文件读入单个多行字符串。

  • -replace '\\r?\n' 替换 \ 字符。 (转义为 \)后跟换行符 (\r?\n)[1] 和(隐含的)空字符串,因此有效地 删除 匹配的序列。

    • 有关基于正则表达式的 -replace 运算符的详细信息,请参阅
  • -split '\r?\n' 将生成的字符串拆分回单独的行数组。

    • 有关基于正则表达式的 -split 运算符的详细信息,请参阅 about_Split

注意:如果输入文件有一个尾随换行符,上面的数组将在末尾有一个额外的empty元素:

  • 如果输入中没有other空行(你需要保留),你可以简单地将-ne ''附加到命令删除所有空字符串元素。

  • 要仅删除 last 元素,最简单(尽管不是最有效)的解决方案是追加
    | Select-Object -SkipLast 1 - 请参阅 Select-Object 的文档。


[1] 这个正则表达式是一种匹配换行符的跨平台方式:它匹配 Windows-style CRLF sequences (\r\n) 和 Unix-style LF - 仅 (\n) 个换行符。