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

问题描述

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

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

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

(?<!}) 仅当前面的字符不是 } 时才是负向后视匹配。然后我们只需将 \r\nCRLF 匹配。