我的 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"
因为 -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
为了便于阅读,我省略了别名
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句