说我在我的终端输入了一些内容,如:
ls | grep phrase
之后,我意识到我要删除所有这些文件。
我想使用Ruby这样做,但无法弄清楚要传递给它的内容。
ls | grep phrase | ruby -e "what do I put in here to go through each line by line?"
答案 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