【问题标题】:ruby cat shell similar红宝石猫壳类似
【发布时间】:2012-07-18 03:16:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

    这是一个小红宝石函数,可以满足您的要求。您确实必须遍历每一行,但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
    

    干杯!

    【讨论】:

    • 浓缩更多:File.open(f).each_with_index do |l,i| ... end
    • @KassymDorsel - 如果你给File.open一个块,当块返回时文件会自动关闭。我几乎总是这样做,因为我认为这样更方便。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多