2012-05-31 34 views
7

Đã lâu rồi tôi không sử dụng ruby ​​cho những thứ như thế này, nhưng tôi quên cách mở một tập tin, tìm chuỗi và in những gì ruby ​​tìm thấy. Dưới đây là những gì tôi có:Ruby tìm chuỗi trong tập tin và kết quả in

#!/usr/bin/env ruby 
f = File.new("file.txt") 
text = f.read 
if text =~ /string/ then 
puts test 
end 

Tôi muốn xác định những gì các "gốc tài liệu" (đường) là trong config/routes.rb

Nếu tôi in ra chuỗi, nó in tập tin.

Tôi cảm thấy câm mà tôi không nhớ đây là gì, nhưng tôi cần biết.

Hy vọng rằng, tôi có thể làm cho nó in này:

# Route is: 
blah blah blah blah 
+1

Bạn sẽ không muốn lặp qua từng dòng chứ không phải toàn bộ tệp? Trong mọi trường hợp, một tìm kiếm web đơn giản sẽ cung cấp một loạt các ví dụ cho việc này. –

Trả lời

1

Bên text bạn có toàn bộ tập tin như là một chuỗi, bạn có thể trận đấu với nó bằng cách sử dụng .match với regexp hoặc như Dave Newton gợi ý bạn có thể chỉ lặp lại trên mỗi dòng và kiểm tra. Something như:

f.each_line { |line| 
    if line =~ /string/ then 
    puts line 
    end 
} 
8
File.open 'file.txt' do |file| 
    file.find { |line| line =~ /regexp/ } 
end 

Đó sẽ trở lại dòng đầu tiên phù hợp với biểu thức chính quy. Nếu bạn muốn tất cả dòng phù hợp, hãy thay đổi find thành find_all.

Nó cũng hiệu quả hơn. Nó lặp lại trên từng dòng một, mà không tải toàn bộ tệp vào bộ nhớ.

Ngoài ra, phương pháp grep thể được sử dụng:

File.foreach('file.txt').grep /regexp/ 
2

Cách đơn giản nhất để có được những gốc là để làm:

rake routes | grep root 

Nếu bạn muốn làm điều đó trong Ruby, tôi sẽ đi với:

File.open("config/routes.rb") do |f| 
    f.each_line do |line| 
    if line =~ /root/ 
     puts "Found root: #{line}" 
    end 
    end 
end 
+1

Cảm ơn bạn đã trỏ OP đến 'rake routes'. Đề nghị duy nhất của tôi sẽ là một trong những nên sử dụng fgrep hoặc 'grep --fixed-strings' nếu một trong những không phải là cố gắng để phù hợp với một biểu thức chính quy. –

+0

+1 cho 'tuyến đường rake'. –

Các vấn đề liên quan