2012-07-17 79 views
0

我是Ruby新手。我過去曾使用過shell。我將一個shell程序轉換爲ruby。我有以下命令:紅寶石貓殼相似

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

shell cat命令返回我正在查找的行和行號。我希望能夠在不使用shell的情況下在ruby中做類似的事情。可能需要將此程序移植到Windows。我可以在ruby中使用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

壓縮它更多:'File.open(f).each_with_index do | l,i | ...結束' – 2012-07-17 19:18:48

+0

@KassymDorsel - 如果你給[File.open](http://www.ruby-doc.org/core-1.9.3/File.html#method-c-open)一個塊,該文件在塊返回時自動關閉。我幾乎總是這樣做,因爲我認爲它更方便。 – 2012-07-17 19:25:46