Удалить строки с помощью Ruby - PullRequest
1 голос
/ 19 марта 2012

Как я могу использовать ruby, чтобы открыть текстовый файл и удалить строки, содержащие «ключевую фразу».

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

Ответы [ 3 ]

5 голосов
/ 19 марта 2012

Примерно так:

File.open(output_file, "w") do |ofile|
  File.foreach(input_file) do |iline|
    ofile.puts(iline) unless iline =~ Key_phrase
  end
end
1 голос
/ 19 марта 2012

Это единовременное, автономное задание? Редактировать файл на месте? Если это так, может пригодиться следующая однострочная строка:

ruby -i.bak -ne 'print unless /key phrase/' file-to-hack.txt

Это изменяет файл и создает резервную копию оригинала. Если вы хотите, чтобы это было частью более крупной программы, добавьте вокруг нее циклы для каждой строки.

0 голосов
/ 14 января 2013

Другой подход заключается в использовании редактирования на месте внутри 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' на ''.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...