如何从CSV文件中的每一行删除第一列中的第一个字符?

时间:2018-03-09 22:17:30

标签: windows powershell replace

我的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"

1 个答案:

答案 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

我省略了别名以便于阅读