Using popen & grep

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

Dan K. wrote:

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!

On 04/12/2010 01:40 AM, Dan K. wrote:

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