我有一个简单的脚本,它会抓取一个网页并将内容行放到屏幕上,然后我只需将它管道输出到grep以输出我想要的内容,然后将其输送到更少的内容。
myscript.rb scrape-term | grep argument | less
我更改了脚本以使用以下内容,而不是在命令行上添加额外的参数;
%x[ #{my-text-output} | grep argument | less ]
但现在我收到了错误;
sh: 0: command not found
我已经尝试了here找到的其他变体,但没有任何效果!
答案 0 :(得分:0)
您需要做的是打开grep
的句柄,而不是将输出卡在那里。黑客解决方案是将输出转储到Tempfile中,并通过grep
从中读取,但实际上这是一团糟。
理想情况下,您所做的只是通过过滤发出与您的模式匹配的输出:
while (...)
# ...
if (output.match(/#{argument}/))
puts argument
end
end
如果需要,可以将其引导至less
。
请记住,对于Array中的任何内容,Ruby中还有一个grep
方法。例如,如果您创建了一个名为output
的数组,其中包含以下行:
output.grep(/#{argument}/).each do |line|
puts line
end
答案 1 :(得分:-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命令一样。