我的CSV文件有列标题,然后对于每行后,第一列中的第一个字符以“+”开头。
如何从每一行(第一个标题行除外)中删除第一列上的第一个字符“+”? 谢谢。
示例文件:
"col1","col2","col3"...
+"datacol1a","datacol2a","datacol3a"
+"datacol1b","datacol2b","datacol3b"
+"datacol1c","datacol2c","datacol3c"
期望的结果:
"col1","col2","col3"...
"datacol1a","datacol2a","datacol3a"
"datacol1b","datacol2b","datacol3b"
"datacol1c","datacol2c","datacol3c"
我尝试了这个PowerShell代码(FindReplace.ps1),但它不起作用:
param([string]$CSVFile="c:\myfolder\myCsv.csv")
(gc $CSVFile) -replace "^+"
如果我使用这个powershell代码,它还会删除标题行上的第一个字符(我不想这样做)。除了标题行(第1行)之外,我该怎么做?
Get-Content -Path $CSVFile | ForEach-Object { $_.substring(1,$_.Length - 1) }
我从BAT文件中调用此PowerShell代码
powershell -file FindReplace.ps1 -CSVFile "c:\myfolder\myCsv.csv" >
"c:\myfolder\myCsv2.csv"
答案 0 :(得分:0)
因为-replace使用正则表达式,所以需要转义+符号。它是一个特殊的角色。而且你需要告诉脚本你要用它替换它。 试试这个:
(Get-Content .\csv1.csv) -replace ('^\+', '') | Out-File .\csv2.csv
这可能是另一种解决方案。
$csv = get-Content C:\Temp\csv1.csv
$header = $csv | Select-Object -First 1
$data = $csv | Select-Object -skip 1 | ForEach-Object { $_.substring(1,
$_.Length - 1) }
$($header; $data) | Set-Content -Path C:\Temp\csv2.csv
编辑添加@TheMadTechnician解决方案。
Get-Content C:\Temp\text.csv| ForEach-Object {$_.trimstart('+')} | set-content c:\temp\csv232.csv
我省略了别名以便于阅读