我正在尝试搜索大量文件并替换部分文本,但我一直遇到错误。
我试过这个,但有时候我会在powershell中出现“内存不足”错误
#region The Setup
$file = "C:\temp\168MBfile.txt"
$hash = @{
ham = 'bacon'
toast = 'pancakes'
}
#endregion The Setup
$obj = [System.IO.StreamReader]$file
$contents = $obj.ReadToEnd()
$obj.Close()
foreach ($key in $hash.Keys) {
$contents = $contents -replace [regex]::Escape($key), $hash[$key]
}
try {
$obj = [System.IO.StreamWriter]$file
$obj.Write($contents)
} finally {
if ($obj -ne $null) {
$obj.Close()
}
}
然后我尝试了这个(在ISE中),但它崩溃了一条弹出消息(抱歉,手头没有错误)并尝试重新启动ISE
$arraylist = New-Object System.Collections.ArrayList
$obj = [System.IO.StreamReader]$file
while (!$obj.EndOfStream) {
$line = $obj.ReadLine()
foreach ($key in $hash.Keys) {
$line = $line -replace [regex]::Escape($key), $hash[$key]
}
[void]$arraylist.Add($line)
}
$obj.Close()
$arraylist
最后,我遇到了类似这样的事情,但我不确定如何正确使用它,我甚至不确定我是否正确地使用它。
$sourcestream = [System.IO.File]::Open($file)
$newstream = [System.IO.File]::Create($file)
$sourcestream.Stream.CopyTo($newstream)
$sourcestream.Close()
任何建议都将不胜感激。
答案 0 :(得分:0)
您可以从1000的读数开始,并根据您获得的性能进行调整:
get-content textfile -Readcount 1000 |
foreach-object {do something} |
set-content textfile
或
(get-content textfile -Readcount 1000) -replace 'something','withsomething' |
set-content textfile