2013-01-05 89 views
8

說我是在我的終端打字一樣東西:你如何將shell輸出輸出到ruby -e?

ls | grep phrase 

而且這樣做之後,我知道我想刪除所有這些文件。

我想使用Ruby來這樣做,但不能完全弄清楚要傳入的內容。

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

你爲什麼要刪除使用Ruby的文件? –

回答

10

以此爲出發點:

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 
+0

顯然,該命令在Ruby 2.0中不起作用。粘貼它,我得到'''不好的數學表達式:操作數預計在'/^D /'''' –

+0

好吧,在我的系統上,使用Ruby 2.0它工作正常。這不是Ruby代碼,它是在shell提示符下粘貼的。是你做的嗎? –

+0

也許我跳過了一個字符或其他東西。我再次嘗試,現在它工作。感謝你的回答。 –

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

更多用途檢查出紅寶石論壇上的談話: http://www.ruby-forum.com/topic/85528

+0

如果它是連續的數據流呢? – Pachonk