1

我是红宝石的新手。我过去使用过shell。我正在将一个 shell 程序转换为 ruby​​。我有以下命令

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

shell cat 命令返回我要查找的行和行号。我希望能够在不使用 shell 的情况下在 ruby​​ 中做类似的事情。可能需要将此程序移植到 Windows。我可以在 ruby​​ 中使用 grep 函数,但是如何返回行号而不必遍历文件中的一百万行。谢谢。

4

1 回答 1

3

这是一个小红宝石函数,可以满足您的要求。您确实必须遍历每一行,但grep也这样做了-您不必自己做。幸运的是,ruby 使循环变得容易:

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

干杯!

于 2012-07-17T19:16:00.377 回答