Powershell替换CSV文件中第12位的字符



我的问题是在CSV文件中替换12个字符位置的大约3000行"quot;(空格(带字符"&";。这似乎是一项容易的任务,但我坚持了下来。我试过这个

CVS文件示例:

03 Aug 2022 00:00:00,212526237600000000,.......................
03 Aug 2022 00:00:00,212526237600000001,.......................
03 Aug 2022 00:00:00,212526237600000002,.......................

我的尝试:

$filename = "File"
$temfile = [System.IO.Path]::GetTempFileName()
Get-Content $filename |
Foreach($line in $filename )
{
($line.SubString(0,12) -replace " ",",") )
} |
Add-Content $temfile
Remove-Item $filename
Move-Item $temfile $newfile 

我将感谢任何有用的答案,提前感谢Lightfoot

主要问题是将Get-Content管道传输到语言关键字foreach,而不是cmdletForEach-Object。然后将循环的结果管道传输到Add-Content。这将导致语法错误,管道不能位于语言关键字的开头或结尾。

您的替换逻辑也有一个问题,一个简单的例子:

'03 Aug 2022 00:00:00,212526237600000000,..........'.SubString(0, 12) -replace ' ', ','

将导致:

03,Aug,2022,

这显然不是你想要的。这个正则表达式可能会执行您想要的操作:(?m)(?<=^.{11})s

例如,给定多行字符串

$string = @'
03 Aug 2022 00:00:00,212526237600000000,........
03 Aug 2022 00:00:00,212526237600000001,........
03 Aug 2022 00:00:00,212526237600000002,........
'@

结果是:

PS ..> $string -replace '(?m)(?<=^.{11})s', ','
03 Aug 2022,00:00:00,212526237600000000,........
03 Aug 2022,00:00:00,212526237600000001,........
03 Aug 2022,00:00:00,212526237600000002,........

如果您想在插入新逗号后保留空白,只需从正则表达式中删除s即可:

$string -replace '(?m)(?<=^.{11})', ','

至于代码的外观:

(Get-Content pathtomyfile.csv -Raw) -replace '(?m)(?<=^.{11})s', ',' |
Set-Content pathtomyNewFile.csv

最新更新