2011-02-13 5 views
6

Ruby를 처음 사용하는 것에 대해 제발 용서해주십시오.Ruby : 여러 디렉토리의 여러 파일에서 정규 표현식 검색

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 = Regexp.new("hello") 
# or use first argument for regexp 
pattern = Regexp.new(ARGV[0]) 

:

pattern = /hello/ 

아니면 (명령 행에서 전달 같은) 문자열에서 정규 표현식을 만들려고 노력하는 경우, 당신은 시도 할 수 있습니다 : 첫 번째 패턴에게 정규 표현식 객체를 만들 검색 중입니다. 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"명령이 정규 표현식과 일치하는 데이터를 표시한다고 가정하고 있습니까? – roobnoob

+0

아, 나는 그것이 유용 할 것이라고 생각하면서 선을 인쇄했습니다. 나는 나의 대답을 업데이트 할 것이다. – wuputah

+0

고맙습니다. 나는 'match'를 얻고있다 : UTF-8 (ArgumentError)의 유효하지 않은 바이트 시퀀스. 나는 이것이 내 원래의 질문과 아무런 관련이 없다는 것을 알고있다. 나는이 새로운 문제를 연구 할 것이다. 저의 원래 질문에 답변 해 주셔서 감사합니다! – roobnoob

관련 문제