2012-07-17 5 views
0

Ruby를 처음 사용했습니다. 나는 과거에 쉘을 사용했다. 쉘 프로그램을 루비로 변환하려고합니다. 다음 명령이 있습니다루비 고양이 껍질 유사

cmd="cat -n " + infile + " | grep '127.0.0.1 '" + site 
f = %x[#{cmd}] 

쉘 cat 명령은 찾고있는 행과 행 번호를 리턴합니다. 쉘을 사용하지 않고 루비에서 비슷한 것을 할 수 있기를 바란다. 이 프로그램을 Windows로 이식해야 할 수도 있습니다. 루비에서 grep 함수를 사용할 수 있지만 파일에서 백만 줄을 반복하지 않고 줄 번호를 반환하는 방법은 무엇입니까? 감사.

답변

2

당신이 요구하는 것을 할 수있는 작은 루비 함수가 있습니다. 당신은 각 라인을 반복해야하지만, grep도 그렇게했습니다. - 당신은 스스로 할 필요가 없었습니다. 다행히도 루비는 루핑을 쉽게 만듭니다.

def mygrep(filename, regex) 
    result = [] 
    File.open(filename) do |f| 
     f.each_with_index do |l, i| 
      result << [i, l] if regex =~ l 
     end 
    end 
    return result 
end 

건배!

+0

Condense more :'File.open (f) .each_with_index do | l, i | ... end' –

+0

@KassymDorsel - [File.open] (http://www.ruby-doc.org/core-1.9.3/File.html#method-c-open)에 차단을하면, 블록이 반환되면 파일이 자동으로 닫힙니다. 나는 항상 더 편리하다고 생각하므로 거의 항상 그렇게 할 것입니다. –

관련 문제