универсального пути нет.
1) Вы можете прочитать файл по частям:
File.open('filename','r') do |f|
chunk = f.read(2048)
...
end
недостаток: вы можете пропустить подстроку, если она будет между кусками, то есть вы ищете "SOME_TEXT", но "SOME_" - это последние 5 байтов первого 2048-байтового блока, и ТЕКСТ "4 байта 2-го блока
2) Вы можете читать файл построчно
File.open('filename','r') do |f|
line = f.gets
...
end
недостаток: таким образом, это будет в 2,5 раза медленнее, чем в первом методе