What's the best way to search for a string in a file?

File.open(filename).grep(/string/)

This loads the whole file into memory (slurps the file). You should avoid file slurping when dealing with large files. That means loading one line at a time, instead of the whole file.

File.foreach(filename).grep(/string/)

It's good practice to clean up after yourself rather than letting the garbage collector handle it at some point. This is more important if your program is long-lived and not just some quick script. Using a code block ensures that the File object is closed when the block terminates.

File.foreach(filename) do |file|
  file.grep(/string/)
end

grep for foo OR bar OR baz, stolen from ruby1line.txt.

$  ruby -pe 'next unless $_ =~ /(foo|bar|baz)/' < file.txt

If your OS has a grep package, you could use a system call:

system("grep meow cat_sounds.txt")

This will return true if grep returns anything, false if it does not.

If you find yourself on a system with grep, you may find this is the "best" way because Ruby can be slow when it comes to file operations.

Tags:

Ruby