我将一个分隔的CSV带到PowerShell中,删除换行符,下面的代码可以正常工作,但我发现我还需要删除额外的逗号,但不知道如何格式化正则表达式。
(Get-Content -Path $fullpath -Raw) -replace '(?<!\x0d)\x0a'," " | out-file $fullpath
我的输入CSV是:
"field1","field2","field3","fred,mary,john,brian","field5"
所以我想保留","
(包括引号),但要删除其他任何逗号。
所以我最终得到了:
"field1","field2","field3","fred mary john brian","field5"
答案 0 :(得分:2)
这样做。
(Get-Content -Path $fullpath -Raw) -replace '(?<!"),|,(?!")',' ' | out-file $fullpath
它只会匹配逗号不是由引号引导或不引用的逗号。
对于所有逗号都是如此,除了引号括起来的那些:","
要仅删除特定字段的逗号,可以使用带有标题的Import-Csv。
$csvin = Import-Csv -Path $fullpath -Header f1,f2,f3,f4,f5
$csvin |%{$_.f4=$_.f4.replace(',',' ')}
$csvin |ConvertTo-Csv -NoTypeInformation |Select-Object -Skip 1 |Set-Content -Path $fullpath
答案 1 :(得分:1)
您可以导入CSV文件,从所有字段中删除逗号,然后再次将其写为CSV。无需尝试编写保持结构完整的正则表达式:
$data = Import-Csv foo.csv
$columns = $data | gm | where MemberType -eq NoteProperty | % Name
$newdata = $data | %{
foreach ($c in $columns) {
$_.$c = $_.$c -replace ',',' '
}
}
$newdata | Export-Csv foo-rewritten.csv