ファイルシステムの制限のために安全に行うことはできないと思います。
インプレイス編集を実際にやりたいのであれば、それをメモリに書き込んで編集してから、古いファイルを置き換えることができます。しかし、このアプローチには少なくとも2つの問題があることに注意してください。まず、書き換えの途中でプログラムが停止すると、不完全なファイルが取得されます。第二に、あなたのファイルが大きすぎる場合、それはあなたの記憶を食べるでしょう。
これらの線に沿って何かが動作するはず
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
が、一時ファイルを使用すると、はるかに安全と標準的なアプローチ
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)
あなたの条件はfile_lines += line unless line.chomp == "aaab"
、のようなそれは、不要なラインであることを示したものである可能性がありたとえば、 "aaab"という行が削除されます。
を配置する必要がありますか? – tokland
「インプレース」とは何ですか? – bugerrorbug
既存のファイル(インプレースアップデート)を変更するか、新しいファイルを作成することができます。この最後のアプローチは、非破壊的であるため一般的に好まれます。オプション '-i'の有無にかかわらず' sed'の例を確認してください。 – tokland