如何将shell输出管道输出到ruby -e?

时间:2013-01-05 22:19:35

标签: ruby

说我在我的终端输入了一些内容,如:

ls | grep phrase

之后,我意识到我要删除所有这些文件。

我想使用Ruby这样做,但无法弄清楚要传递给它的内容。

ls | grep phrase | ruby -e "what do I put in here to go through each line by line?"

2 个答案:

答案 0 :(得分:11)

以此为出发点:

ls ~ | ruby -ne 'print $_ if $_[/^D/]'

返回:

Desktop
Documents
Downloads
Dropbox

-n标志表示“循环所有传入行”并将它们存储在“默认”变量$_中。我们没有看到这个变量用得太多,部分原因是对Perl过度使用它的下意识反应,但它在Rubydom中有它的有用时刻。

这些是常用的标志:

-e 'command'    one line of script. Several -e's allowed. Omit [programfile]
-n              assume 'while gets(); ... end' loop around your script
-p              assume loop like -n but print line also like sed

答案 1 :(得分:2)

ARGF将保存您的培根。

ls | grep phrase | ruby -e "ARGF.read.each_line { |file| puts file }"
=> phrase_file
   file_phrase
   stuff_in_front_of_phrase
   phrase_stuff_behind

ARGF是一个数组,用于存储传递给您(在本例中为命令行)脚本的任何内容。 您可以在此处详细了解ARGF

http://www.ruby-doc.org/core-1.9.3/ARGF.html

有关更多用途,请查看Ruby论坛上的演讲: http://www.ruby-forum.com/topic/85528