我们有23 GB的SQL文件,无法在任何文本文件中打开该文件,因此我正在尝试使用Powershell脚本。
((Get-Content D:\test.sql) -replace 'XXY','UUUUU') |Set-Content D:\test.sql
问题是它花费的时间太长,我要修改的文本停留在1st 20行中,所以我尝试了
((Get-Content D:\test.sql) |Select -First 20 -replace 'xxxx','UUUU') |Set-Content D:\test.sql
没有运气,没有错误,什么都没有发生?我是否缺少任何东西?
答案 0 :(得分:0)
这里有两个选项可以加快读取/写入过程。 两者都一次读取一行,替换您需要替换的内容,然后将该行写入 new 输出文件。
第一个利用.NET System.IO.File ReadLines方法:
foreach ($line in [System.IO.File]::ReadLines("D:\test.sql")) {
Add-Content -Path 'D:\test2.sql' -Value ($line -replace 'XXY','UUUUU')
}
使用.Net System.IO.StreamReader和System.IO.StreamWriter可能比上述方法更快:
$reader = New-Object System.IO.StreamReader("D:\test.sql")
$writer = New-Object System.IO.StreamWriter("D:\test2.sql")
while (($line = $reader.ReadLine()) -ne $null) {
$writer.WriteLine(($line -replace 'XXY','UUUUU'))
}
$reader.Dispose()
$writer.Dispose()