我需要使用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
我需要获得下一行,进行一些处理,最后删除这些行,但是所有行仍在文件中。
答案 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 ] $