如何在 Powershell 中只删除第一次出现的没有“}”的行?

How to delete only first ocurrence of line without "}" in Powershell?

我尝试删除文件中的回车 return,所有行的末尾都有一个“}”,但有些行有一个 return 回车,而“}”在其下方。 .. 这是我的代码和文件的示例,但不起作用。非常感谢!!

Original File

与“INGENIERIA Y SERVICIOS LOS NOGALES SPA”这行有冲突。

Expected Result

代码:

$InputFile='Original.txt'
$OutPutFile='NewFile.txt'
(Get-Content $InputFile) | ForEach-Object -Begin {
$results = @()
} -Process {
$out = $.Split("}").GetUpperBound(0)
[int]$iOut = [int]$out
if($iOut -lt 1){$.Replace("`r`n","")}else{$_}
} | Set-Content $OutPutFile

谢谢!

您可以执行以下操作:

(Get-Content $InputFile -Raw) -replace '(?<!})\r\n' |
    Set-Content $outputfile

使用不带-Raw-ReadCount参数的Get-Content读取文件,读取每一行并将其作为数组元素输出。一旦找到分隔符,就会输出一行。 Get-Content 的默认分隔符是行尾字符。 -Raw 允许保留换行符并将文件作为单个字符串读取。

(?<!}) 是负向后视匹配,仅当前面的字符不是 } 时。然后我们简单地将 \r\n 匹配为 CRLF.