Ich denke, Sie können das nicht sicher wegen Dateisystem Einschränkungen tun.
Wenn Sie wirklich eine Inplace-Bearbeitung durchführen möchten, könnten Sie versuchen, sie in den Speicher zu schreiben, sie zu bearbeiten und dann die alte Datei zu ersetzen. Aber Vorsicht, es gibt mindestens zwei Probleme mit diesem Ansatz. Erstens, wenn Ihr Programm mitten im Neuschreiben aufhört, erhalten Sie eine unvollständige Datei. Zweitens, wenn Ihre Datei zu groß ist, wird es Ihr Gedächtnis auffressen.
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
etwas in diese Richtung sollte funktionieren, aber eine temporäre Datei ist eine viel sicherere und die Standard-Ansatz
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)
Ihr Zustand könnte alles sein, die zeigte, war es die unerwünschte Linie, wie, file_lines += line unless line.chomp == "aaab"
würde zum Beispiel die Zeile "aaab" entfernen.
muss an Ort und Stelle sein? – tokland
was meinst du mit "inplace"? – bugerrorbug
Sie können entweder die vorhandene Datei (das ist ein direktes Update) ändern oder eine neue erstellen. Dieser letzte Ansatz wird im Allgemeinen bevorzugt, da er nicht destruktiv ist. Überprüfen Sie zum Beispiel 'sed' mit oder ohne die Option' -i'. – tokland