Using popen & grep

D

Dan King

I'm relatively new to ruby and to practice I've put together the code
below - it's supposed take two arguments then apply it to a grep command
and display the output. Currently, nothing is outputted to the console.
Anyone see what I'm doing wrong, thanks.

1 #!/usr/bin/ruby
2
3 results = IO.popen("grep -i #{ARGV[0]} #{ARGV[1]}", "r")
4 while output = results.gets
5 puts output
6 end
7 results.close
 
C

Chen Ge

Dan said:
I'm relatively new to ruby and to practice I've put together the code
below - it's supposed take two arguments then apply it to a grep command
and display the output. Currently, nothing is outputted to the console.
Anyone see what I'm doing wrong, thanks.

1 #!/usr/bin/ruby
2
3 results = IO.popen("grep -i #{ARGV[0]} #{ARGV[1]}", "r")
4 while output = results.gets
5 puts output
6 end
7 results.close

cmd="grep -i #{ARGV[0]} #{ARGV[1]}"
puts cmd

results = IO.popen(cmd, "r")
while output = results.gets
puts output
end
results.close

you should chech ARGV is correct. you can run cmd on console to see
result,cheers!
 
R

Robert Klemme

I'm relatively new to ruby and to practice I've put together the code
below - it's supposed take two arguments then apply it to a grep command
and display the output. Currently, nothing is outputted to the console.
Anyone see what I'm doing wrong, thanks.

1 #!/usr/bin/ruby
2
3 results = IO.popen("grep -i #{ARGV[0]} #{ARGV[1]}", "r")
4 while output = results.gets
5 puts output
6 end
7 results.close

A few remarks: the block form of IO.popen is more robust because it
ensures proper closing of file handles. Also, using an array as first
argument avoids quoting issues - you need 1.9 for this. Thus you could do:

IO.popen ["grep", "-i", *ARGV[0..1]], "r" do |io|
io.each_line do |line|
puts line
end
end

However, much easier would be to read and grep yourself in Ruby:

rx = Regexp.new(ARGV[0], Regexp::IGNORECASE)

File.foreach ARGV[1] do |line|
puts line if rx =~ line
end

Kind regards

robert
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top