2012-05-31 9 views
7

यह बहुत लंबा समय रहा है क्योंकि मैंने इस तरह की चीजों के लिए रूबी का उपयोग किया है, लेकिन मैं भूल जाता हूं कि फ़ाइल कैसे खोलें, स्ट्रिंग की तलाश करें, और प्रिंट करें कि रूबी पाई जाती है।रूबी फ़ाइल में स्ट्रिंग ढूंढें और प्रिंट परिणाम

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

मैं निर्धारित करने के लिए क्या "दस्तावेज़ रूट" (रूट) अगर मैं स्ट्रिंग प्रिंट, यह फ़ाइल प्रिंट config/routes.rb

में है चाहता हूँ: यहाँ मैं क्या है।

मुझे लगता है कि मुझे यह याद नहीं है कि यह क्या है, लेकिन मुझे यह जानने की ज़रूरत है।

उम्मीद है, मैं इसे इस प्रिंट कर सकते हैं:

# Route is: 
blah blah blah blah 
+1

क्या आप पूरी फ़ाइल के बजाय प्रत्येक पंक्ति पर पुनरावृत्ति नहीं करना चाहते हैं? किसी भी मामले में, एक साधारण वेब खोज इसके लिए उदाहरणों की एक बहुतायत प्रदान करेगी। –

उत्तर

1

text के अंदर आप एक स्ट्रिंग के रूप पूरी फ़ाइल है, तो आप या तो इसके खिलाफ मैच regexp साथ या डेव न्यूटन के रूप में एक .match का उपयोग कर सकते हैं सुझाव दिया तुम सिर्फ कर सकते हैं प्रत्येक पंक्ति पर फिर से शुरू करें और जांचें। कुछ जैसे:

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

कि पहली पंक्ति है कि नियमित एक्सप्रेशन से मेल खाता वापस आ जाएगी। यदि आप सभी मिलान लाइनों को चाहते हैं, तो find से find_all बदलें।

यह भी अधिक कुशल है। यह पूरी फाइल को स्मृति में लोड किए बिना, एक समय में लाइनों पर फिर से शुरू होता है।

इसके अलावा, grep विधि का इस्तेमाल किया जा सकता है:

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

जड़ पाने के लिए सबसे आसान तरीका क्या करना है:

rake routes | grep root 

आप रूबी में यह करना चाहते हैं, मैं जाना होगा के साथ:

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

ओपी को 'रेक मार्ग' पर इंगित करने के लिए धन्यवाद। मेरा एकमात्र सुझाव यह होगा कि अगर कोई नियमित अभिव्यक्ति से मेल खाने का प्रयास नहीं कर रहा है तो उसे fgrep या 'grep --fixed-strings' का उपयोग करना चाहिए। 'रेक मार्ग' के लिए –

+0

+1। –

संबंधित मुद्दे