2013-01-05 12 views
8

powiedzieć, że byłem wpisując coś w moim terminalu jak:W jaki sposób wyłuskujesz wyjście powłoki do ruby ​​-e?

ls | grep phrase 

i po zrobieniu więc rozumiem, że chcesz usunąć wszystkie te pliki.

Chcę użyć Ruby, aby to zrobić, ale nie wiem, co należy w nim umieścić.

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

Dlaczego chcesz usunąć pliki z Ruby? –

Odpowiedz

10

wykorzystać to jako punkt wyjścia:

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

Która zwraca:

Desktop 
Documents 
Downloads 
Dropbox 

Flaga -n oznacza "pętlę nad wszystkimi liniami przychodzącymi" i przechowuje je w "domyślnej" zmiennej $_. Nie widzimy, aby ta zmienna była wykorzystywana w znacznym stopniu, częściowo jako odruchowa reakcja na nadużywanie Perla, ale ma ona przydatne momenty w Rubydomie.

Są powszechnie stosowane flagi:

-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

To polecenie nie działa najwyraźniej w Ruby 2.0. Wkleiłem to dokładnie i otrzymuję '' 'złe wyrażenie matematyczne: argument operacji na'/^ D/'' ' –

+0

Cóż, na moich systemach, używając Ruby 2.0, działa dobrze. Nie jest to jednak kod Ruby, należy go wkleić w wierszu powłoki. Czy ty to zrobiłeś? –

+0

Może pominąłem znak lub coś takiego. Próbowałem ponownie i teraz działa. Dziękuję za odpowiedź. –

2

ARGF zapisze ci bekon.

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 jest tablicą, która przechowuje cokolwiek przeszedł do swojego (w tym przypadku linii poleceń) skryptu. Możesz przeczytać więcej o ARGF tutaj:

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

Więcej zastosowań sprawdzić ten referat na temat Ruby Forum: http://www.ruby-forum.com/topic/85528

+0

Co jeśli jest to ciągły strumień danych? – Pachonk

Powiązane problemy