删除不可见< br>从双引号内与PowerShell

cfh9epnr  于 2023-05-17  发布在  Shell
关注(0)|答案(1)|浏览(146)

我有一个csv文件的输出,我在Notepad ++中打开了它。我通过一个API调用得到了这个输出。下面的示例是玩具数据,但与原始数据类似。

id,name,description
2341,Example,"Example with no double quotes"
4567,Second Example,"Example with double quotes
But the line breaks"

第一个条目只占用一行,但第二个条目占用两行,因为该行中断了。从我获得数据的地方,在第二行的描述中,单词“quotes”和“But”之间有一个<br>。在csv输出和通过notepad++查看时,此字符不可见,但会换行。
我使用以下代码来修复它:

$text=(Get-Content $filepath -Raw) -replace  '([^,]")(\s*\r\n\s*)+("[^,])',"`$1`n`$3" -replace '\r\n',''

但结果和上面一样。
理想的结果如下:

id,name,description
2341,Example,"Example with no double quotes"
4567,Second Example,"Example with double quotes But the line breaks"

其中删除了<br>字符。

jdgnovmf

jdgnovmf1#

面向对象的解决方案是使用Import-CsvConvertFrom-Csv

Import-Csv $filepath | ForEach-Object {
    $_.description = $_.description -replace '\r?\n', ' '
    $_
} | ConvertTo-Csv

上面的例子之所以有效,是因为你知道.description属性需要更新,但是,如果你不知道/不想处理CSV中的所有列,你需要迭代每个对象的每个属性:

Import-Csv $filepath | ForEach-Object {
    foreach($property in $_.PSObject.Properties) {
        if($property.Value -match '\r?\n') {
            $property.Value = $property.Value -replace '\r?\n', ' '
        }
    }

    $_
} | ConvertTo-Csv

相关问题