Powershell修改大型SQL文件

时间:2019-05-03 13:12:47

标签: powershell

我们有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

没有运气,没有错误,什么都没有发生?我是否缺少任何东西?

1 个答案:

答案 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.StreamReaderSystem.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()