Myślę, że nie można zrobić tego bezpiecznie z powodu ograniczeń systemu plików.
Jeśli naprawdę chcesz wykonać edycję lokalną, możesz spróbować zapisać ją w pamięci, edytować, a następnie zamienić stary plik. Ale strzeż się, że z tym podejściem są co najmniej dwa problemy. Po pierwsze, jeśli program zostanie zatrzymany w trakcie przepisywania, otrzymasz niekompletny plik. Po drugie, jeśli twój plik jest zbyt duży, zjem pamięć.
file_lines = ''
IO.readlines(your_file).each do |line|
file_lines += line unless <put here your condition for removing the line>
end
<extra string manipulation to file_lines if you wanted>
File.open(your_file, 'w') do |file|
file.puts file_lines
end
Coś wzdłuż tych linii powinny działać, ale przy użyciu pliku tymczasowego jest o wiele bezpieczniejsze, a średnia podejście
require 'fileutils'
File.open(output_file, "w") do |out_file|
File.foreach(input_file) do |line|
out_file.puts line unless <put here your condition for removing the line>
end
end
FileUtils.mv(output_file, input_file)
Twój stan może być cokolwiek, który pokazał, że to niepotrzebny wiersz, jak, file_lines += line unless line.chomp == "aaab"
na przykład, usunie wiersz "aaab".
musi być na miejscu? – tokland
co masz na myśli przez "inplace"? – bugerrorbug
Możesz zmodyfikować istniejący plik (to jest aktualizacja lokalna) lub utworzyć nowy. To ostatnie podejście jest na ogół preferowane, ponieważ nie jest niszczące. Sprawdź na przykład "sed" z opcją lub bez opcji "-i". – tokland