Другой подход заключается в использовании редактирования на месте внутри ruby (не из командной строки):
#!/usr/bin/ruby
def inplace_edit(file, bak, &block)
old_argv = Array.new(ARGV)
old_stdout = $stdout
ARGV.replace [file]
ARGF.inplace_mode = bak
ARGF.lines do |line|
yield line
end
ARGV.replace old_argv
$stdout = old_stdout
end
inplace_edit 'test.txt', '.bak' do |line|
print line unless line.match(/something/)
print line.gsub(/search1/,"replace1")
end
Если вы не хотите создавать резервную копию, измените '.bak' на ''.