使用Replace语句简化PowerShell脚本

使用Replace语句简化PowerShell脚本,powershell,Powershell,我试图在Windows2012 R2中的50GB文件上运行此脚本,我希望将三个replace语句合并为一个过程,而不是三个过程。此外,重要的是要按照该顺序进行替换。如果您有任何建议可以简化此过程并使其高效运行,我们将不胜感激 $filePath = "D:\FileLocation\file_name.csv" (Get-Content $filePath | out-string).Replace('"', '""') | Set-Content $filePath (Get-Content

我试图在Windows2012 R2中的50GB文件上运行此脚本,我希望将三个replace语句合并为一个过程,而不是三个过程。此外,重要的是要按照该顺序进行替换。如果您有任何建议可以简化此过程并使其高效运行,我们将不胜感激

$filePath = "D:\FileLocation\file_name.csv"
(Get-Content $filePath | out-string).Replace('"', '""') | Set-Content $filePath
(Get-Content $filePath | out-string).Replace('|~|', '"') | Set-Content $filePath
(Get-Content $filePath | out-string).Replace('|@|', ',') | Set-Content $filePath

可以在同一行中组合.replace()

$filepath="/Users/me/Desktop/text.txt"
'test text 123' |Out-File -Path $filepath
(Get-Content $filepath|Out-String).Replace('test','1').Replace('text','2').Replace('123','3')|Set-Content $filepath
Get-Content $filepath
1 2 3

可以在同一行中组合.replace()

$filepath="/Users/me/Desktop/text.txt"
'test text 123' |Out-File -Path $filepath
(Get-Content $filepath|Out-String).Replace('test','1').Replace('text','2').Replace('123','3')|Set-Content $filepath
Get-Content $filepath
1 2 3

对于如此大的文件,我建议您逐行(或成批)处理该文件,这将加快整个过程

您可以在此处复制True提到的脚本

但不是直接写$Line,而是执行替换

$sw.WriteLine($line.replace().replace().replace())
请小心获取内容,因为这将尝试加载整个文件,并且在内存不足时会变得非常缓慢。
如果没有太多的磁盘空间,也要小心。链接的解决方案将在替换文件之前制作一份文件副本(带有更改)。

对于如此大的文件,我建议您逐行(或分批)处理文件,这将加快整个过程

您可以在此处复制True提到的脚本

但不是直接写$Line,而是执行替换

$sw.WriteLine($line.replace().replace().replace())
请小心获取内容,因为这将尝试加载整个文件,并且在内存不足时会变得非常缓慢。
如果没有太多的磁盘空间,也要小心。在替换文件之前,链接的解决方案将制作文件的副本(带有更改)。

您可以使用-replace操作符

$filepath="c:\temp\text.txt"
(Get-Content $filepath) -replace 'test','1' -replace 'text','2' -replace '123','3' |Set-Content $filepath

您可以使用-replace操作符

$filepath="c:\temp\text.txt"
(Get-Content $filepath) -replace 'test','1' -replace 'text','2' -replace '123','3' |Set-Content $filepath

非常感谢你,太完美了!我也遇到了内存问题。有一个
-ReadCount
参数指定一次通过管道发送多少行内容。“此参数不会更改显示的内容,但会影响显示内容所需的时间。随着ReadCount值的增加,返回第一行所需的时间增加,但操作的总时间减少。这可能会对非常大的项目产生明显的影响。”。不管怎样,流式处理速度更快…@Shadowzee你知道如何调整代码,使其成批处理,而不是一次一行吗?不幸的是,我再也记不起来了。我当时正在解析一个6GB的文件,遇到了性能问题。我记得最主要的一点是分批阅读比逐行阅读要快,只快一点点,但它有点复杂,因为你必须管理如何读和写这一批行。非常感谢,这太完美了!我也遇到了内存问题。有一个
-ReadCount
参数指定一次通过管道发送多少行内容。“此参数不会更改显示的内容,但会影响显示内容所需的时间。随着ReadCount值的增加,返回第一行所需的时间增加,但操作的总时间减少。这可能会对非常大的项目产生明显的影响。”。不管怎样,流式处理速度更快…@Shadowzee你知道如何调整代码,使其成批处理,而不是一次一行吗?不幸的是,我再也记不起来了。我当时正在解析一个6GB的文件,遇到了性能问题。我记得的主要事情是分批阅读比逐行阅读要快,只快一点点,但它有点复杂,因为你必须管理如何读和写一批行。