2011-02-13 10 views
6

कृपया मेरी अज्ञानता को क्षमा करें, मैं रूबी के लिए नया हूं।रूबी: एकाधिक निर्देशिकाओं में एकाधिक फ़ाइलों में नियमित अभिव्यक्ति खोजना

str = File.read('example.txt') 
match = str.scan(/[0-9A-Za-z]{8,8}/) 

puts match[1] 

मैं एकाधिक फ़ाइलों और निर्देशिका

pattern = "hello" 

Dir.glob('/home/bob/**/*').each do |file| 
    next unless File.file?(file) 
     File.open(file) do |f| 
      f.each_line do |line| 
       puts "#{pattern}" if line.include?(pattern) 
     end 
    end 
end 

में एक स्थिर वाक्यांश के लिए खोज करने के लिए कैसे पता:

मैं एक स्ट्रिंग, या एक नियमित अभिव्यक्ति के साथ भी एक एकल फाइल खोज करने के लिए कैसे पता मैं कई फाइलों और निर्देशिकाओं के खिलाफ अपने regexp का उपयोग करने का तरीका नहीं समझ सकता। किसी भी और सभी मदद की बहुत सराहना की है।

उत्तर

5

ठीक है, आप काफी करीब हैं।

pattern = /hello/ 

या यदि आप एक स्ट्रिंग से एक Regexp बनाने के लिए (कमांड लाइन पर में पारित की तरह) की कोशिश कर रहे हैं, तो आप कोशिश कर सकते हैं:

pattern = Regexp.new("hello") 
# or use first argument for regexp 
pattern = Regexp.new(ARGV[0]) 

अब जब आप सबसे पहले पैटर्न एक RegExp ऑब्जेक्ट बनाने खोज रहे हैं, line एक स्ट्रिंग है। आप अपने पैटर्न के खिलाफ मिलान के परिणाम प्राप्त करने के लिए match या scan का उपयोग कर सकते हैं।

f.each_line do |line| 
    if line.match(pattern) 
    puts $0 
    end 
    # or 
    if !(match_data = line.match(pattern)).nil? 
    puts match_data[0] 
    end 
    # or to see multiple matches 
    unless (matches = line.scan(pattern)).empty? 
    p matches 
    end 
end 
+0

प्रतिक्रिया के लिए आपको बहुत बहुत धन्यवाद। मुझे रेगेक्स खोज परिणाम क्या दिखने में समस्याएं आ रही हैं। मुझे लगता है कि "puts" कमांड डेटा को regexp से मेल खाता सही दिखाएगा? – roobnoob

+0

आह, मैंने लाइन को मुद्रित किया जैसा कि मैंने पाया कि यह अधिक उपयोगी होगा। मैं अपना जवाब अपडेट करूंगा। – wuputah

+0

इसके लिए आपको बहुत बहुत धन्यवाद। मुझे 'मैच' मिल रहा है: यूटीएफ -8 (ArgumentError) में अमान्य बाइट अनुक्रम। मुझे पता है कि मेरे मूल प्रश्न के साथ इसका कोई लेना-देना नहीं है। मैं इस नए मुद्दे का शोध करूंगा। मेरे मूल प्रश्न का उत्तर देने के लिए धन्यवाद! – roobnoob

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