Hola cmfab.
Si no se puede trabajar en memoria por el tamaño, te va a quedar hacerlo en disco.
Una forma simple sería:
.Crear un archivo destino.
.Leer las línea del origen
.Copiarlas si coinciden con un criterio
.Borrar archivo origen
.Renombrar archivo destino como origen
Un ejemplo muy simplificado:
Código Delphi
[-]
function CopiarLinea(Linea: string): Boolean;
begin
Result:= False;
if Pos('el verde prado', Linea) = 0 then Result:= True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
f1,f2: TextFile;
Linea: string;
begin
AssignFile(f1, 'C:\Origen.txt');
Reset(f1);
AssignFile(f2, 'C:\Destino.TXT');
Rewrite(f2);
while not Eof(f1) do
begin
Readln(f1,Linea);
if CopiarLinea(Linea) then
Writeln(f2, Linea);
end;
CloseFile(f1);
CloseFile(f2);
if DeleteFile('C:\Origen.txt') then
RenameFile('C:\Destino.TXT', 'C:\Origen.txt');
end;
Si la aplicación va a ser usada con mucha frecuencia hay métodos más eficientes, pero para un uso moderado te va a funcionar.
Un saludo.