0

我有一个简单的脚本,它可以抓取网页并将内容行放到屏幕上,然后我只需将其通过管道传输到 grep 以输出我想要的内容,然后将其传输到更少。

myscript.rb scrape-term | grep argument | less

我将脚本更改为使用以下内容,而不是在命令行上使用额外的参数;

%x[ #{my-text-output} | grep argument | less ]

但现在我得到了错误;

sh: 0: command not found

我已经尝试过这里发现的其他变体,但没有任何效果!

4

2 回答 2

0

你需要做的是打开一个手柄grep,而不是把输出卡在那里。hack 解决方案是将您的输出转储到一个 Tempfile 中并从中读取,grep但实际上那是一团糟。

理想情况下,您所做的只是通过过滤发出与您的模式匹配的输出:

while (...)
  # ...

  if (output.match(/#{argument}/))
    puts argument
  end
end

less然后,如果需要,可以将其引导至。

请记住,Ruby 内部还有一个grep用于数组中任何内容的方法。例如,如果您创建了一个数组output,其中包含以下行:

output.grep(/#{argument}/).each do |line|
  puts line
end
于 2012-09-04T16:40:39.253 回答
-1

既然你无论如何都要在shell中运行它,因为有一个less命令,那么也许试试这个:

%x[ echo #{my-text-output} | grep argument | less ]

您也可以尝试echo -e将显示\n为换行符等。

(理想情况下,您的文本应该已经\n在每行的末尾有一个字符。)

编辑:

""了变量。没有更多的Unknown Command错误,虽然less不想和我一起工作。我现在有这个 script.rb:

text = "foo
foobar
foobaraski
bar
barski"

a = %x[ echo "#{text}" | grep foo]

print a

它给了我:

shell> ruby script.rb 
foo
foobar
foobaraski

编辑2:

现在它起作用了:

text = "foo
foobar
foobaraski
bar
barski"
system "echo '#{text}' | grep foo | less"

就像 bash 命令一样,用三行打开 less。

于 2012-09-04T16:46:09.833 回答