ovatsug25
ovatsug25

Reputation: 8596

How do you pipe shell output to ruby -e?

Say I was typing something in my terminal like:

ls | grep phrase

and after doing so I realize I want to delete all these files.

I want to use Ruby to do so, but can't quite figure out what to pass into it.

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

Upvotes: 10

Views: 4348

Answers (2)

ovatsug25
ovatsug25

Reputation: 8596

ARGF will save your bacon.

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 is an array that stores whatever you passed into your (in this case command-line) script. You can read more about ARGF here:

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

For more uses check out this talk on Ruby Forum: http://www.ruby-forum.com/topic/85528

Upvotes: 5

the Tin Man
the Tin Man

Reputation: 160551

Use this as a starting point:

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

Which returns:

Desktop
Documents
Downloads
Dropbox

The -n flag means "loop over all incoming lines" and stores them in the "default" variable $_. We don't see that variable used much, partly as a knee-jerk reaction to Perl's overuse of it, but it has its useful moments in Rubydom.

These are the commonly used flags:

-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

Upvotes: 14

Related Questions