替换powershell中双引号内的字符串

替换powershell中双引号内的字符串,powershell,Powershell,我需要替换csv文件中的一些文本。我只想在逗号位于双引号内时替换逗号。在Powershell中我该怎么做 Example input: ID, City, State 1,"Cape, Town",Tx 2,Sarasota,Fl 3,"Long, Beach",Ca Example output: ID, Name, Title 1,"Cape Town",Tx 2,Sarasota,Fl 3,"Long Beach",Ca 我不确定我是否完全理解你的问题,我想你担心的是你的CSV结构,而

我需要替换csv文件中的一些文本。我只想在逗号位于双引号内时替换逗号。在Powershell中我该怎么做

Example input:
ID, City, State
1,"Cape, Town",Tx
2,Sarasota,Fl
3,"Long, Beach",Ca

Example output:
ID, Name, Title
1,"Cape Town",Tx
2,Sarasota,Fl
3,"Long Beach",Ca

我不确定我是否完全理解你的问题,我想你担心的是你的CSV结构,而不是城市没有引号,逗号不应该删除的可能性?对我来说没有多大意义,因为那可能会破坏东西。无论如何

$x = Import-CSV ex.csv
$x |% {$_.City = $_.City.Replace(',','')}
$x | Export-CSV out.csv

这可能适用于您。

您可以更改分隔符、替换和重新更改分隔符:

(import-csv "c:\temp\file1.csv" | ConvertTo-Csv -Delimiter ";" -NoType ).Replace(',', '').Replace(';', ',') | out-file "c:\temp\file1.csv"

我的例子是一个简化的例子。可能有引号的列可能并不总是明显的。但是,主要目标是仅替换带引号字符串中的逗号。这将保留CSV格式以供导入。是的,除了引号内的逗号外,您不能替换任何逗号:这不可能通过replace方法实现,因为导入Csv时会将其转换为Powershell对象表。因此,此解决方案将始终适用于您,您只需为更多列添加其他语句,并根据需要重命名。如果您没有/想要结构化文件,也可以使用类似以下内容的导入csv ex.csv | Get member-MemberType“NoteProperty”|选择Object-ExpandProperty“Name”来创建标题数组,与使用Get-Member和Select-Expand相比,使用hidden PSObject属性更容易。So$CSV=导入CSV ex.CSV$CSV[0].PSObject.Properties.Name将为您提供标题列的列表。