Как удалить строки из файла без создания временного файла в ruby? - PullRequest
0 голосов
/ 02 июня 2019

Мне нужно удалить строку файла последовательно с ruby, но безуспешно.

Если я открываю файл с флагом w +, он становится полностью пустым, а если я открываю с флагом r +, ничего не происходит. Я даже пытался сделать это с помощью системной команды sed, но безрезультатно. Что не так?

$ cat teste.txt 
foo
bar

- This is by ruby way:
$ cat ruby.rb 
#!/usr/bin/ruby

path = '/home/paulosgf/hack/metasploit/teste.txt'
File.open(path, 'r+') do |file|
    file.each do |line|
        puts(line)
        line.gsub(/^.$\n/, '')
    end
file.close()
end

$ ./ruby.rb 
foo
bar

$ cat teste.txt (nothing happens)
foo
bar

- This is by sed way:
$ cat sed.rb 
#!/usr/bin/ruby

path = '/home/paulosgf/hack/metasploit/teste.txt'
File.open(path, 'r+') do |file|
    file.each do |line|
        puts(line)
        system("sed -i", "/#{line}/d #{path}")
    end
file.close()
end

$ ./sed.rb 
foo
bar

$ cat teste.txt 
foo
bar

Мне нужно получить следующую строку, выполнить некоторую обработку и удалить эти строки в конце, но все строки остаются в файле.

1 Ответ

0 голосов
/ 09 июня 2019

Я нашел решение на другом форуме.[https://www.ruby -forum.com / t / delete-первая строка-текстового файла / 134316/4] Требуется только изменить фокус:

[ paulosgf /home/paulosgf/hack/metasploit ] $ cat teste.txt 
john
doe
foo
bar
[ paulosgf /home/paulosgf/hack/metasploit ] $ cat delFirst.rb 
#!/usr/bin/ruby

path = '/home/paulosgf/hack/metasploit/teste.txt'
remains=''
line=''
each=''

File.foreach(path) { |each|
File.open(path, 'r') {|file| line=file.gets; remains=file.read}
puts("#{line}")
File.open(path, 'w+') {|file| file.write(remains)}
}
[ paulosgf /home/paulosgf/hack/metasploit ] $ ./delFirst.rb 
john
doe
foo
bar
[ paulosgf /home/paulosgf/hack/metasploit ] $ cat teste.txt 
[ paulosgf /home/paulosgf/hack/metasploit ] $ 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...