Ищем идиоматический способ регулярного выражения для обработки текстового файла в Ruby

Я ищу идиоматический способ регулярной обработки текстового файла в Ruby, и вот лучшее, что я смог придумать до сих пор. Он удаляет все символы ":

#!/usr/bin/env ruby

src_name = ARGV[0]
dest_name = ARGV[1]
File.open(src_name, "r+") { |f| 
  new_lines = f.map { |l| 
    l = l.gsub(/"/,'')
  }
  dest_file = File.new(dest_name,"w")
  new_lines.each { |l|
    dest_file.puts l
  }
}

Должно быть что-то лучше. Например:

  • Зачем мне переписывать файл, неужели нельзя сделать что-то умнее с пайпами?
  • Я делаю все построчно, кажется, я должен решить проблему с входными и выходными потоками.

person JnBrymn    schedule 12.08.2011    source источник
comment
не ruby, а sed (если на * nix) построен для этого и устранит необходимость в ruby-скрипте sed 's/"//g' <input >output   -  person numbers1311407    schedule 12.08.2011


Ответы (2)


Ответ Евгения потрясающий. Здесь то же самое, что и "обычный" скрипт.

#!/usr/bin/env ruby
STDOUT << STDIN.read.gsub(/"/,'') 
person Emmanuel Oga    schedule 12.08.2011

Если вы собираетесь выполнить простую замену, вы можете сделать это в командной строке следующим образом:

ruby -e '$_.gsub!(/"/,"")' -i.bak -p INPUT_FILE.txt

Он запускает все, что вы передаете в качестве аргумента флагу -e, заменяет содержимое INPUT_FILE.txt результатом и просто для безопасности сохраняет копию оригинала с расширением .bak.

person eugen    schedule 12.08.2011