如何从文件中删除行而不在ruby中创建临时文件?

时间:2019-06-02 20:41:36

标签: ruby

我需要使用ruby顺序删除文件的一行,但是没有成功。

如果我使用w +标志打开文件,则文件将完全为空,如果我使用r +标志打开文件,则不会发生任何事情。 我什至尝试用sed的system命令执行此操作,但也没有结果。 怎么了?

$ 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 :(得分:0)

我在另一个论坛上找到了解决方案。 [https://www.ruby-forum.com/t/delete-first-line-of-a-text-file/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 ] $