在文件中搜索字符串的最佳方法是什么?

时间:2009-03-11 05:00:04

标签: ruby

标题真的说明了一切。我只想知道它是否存在,而不是它的存在。有没有一个班轮来实现这个目标?

5 个答案:

答案 0 :(得分:43)

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

这会将整个文件加载到内存中。 如果您正在处理大型文件,请更喜欢啜饮它们 这意味着一次加载一行,而不是整个文件。

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

最好是自己清理,而不是让垃圾收集器在某个时候处理它。如果你的程序是长寿的而不仅仅是一些快速的脚本,这一点更为重要。使用代码块可确保在块终止时关闭File对象。

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

答案 1 :(得分:10)

grep for foo OR bar OR baz,从ruby1line.txt被盗。

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

答案 2 :(得分:5)

如果您的操作系统有一个grep软件包,您可以使用系统调用:

system("grep meow cat_sounds.txt")

如果grep返回任何内容,则返回true,否则返回false。

如果你发现自己在grep的系统上,你会发现这是“最好的”方式,因为Ruby在文件操作方面可能会很慢。

答案 3 :(得分:2)

好吧,看来eed3si9n有一个内线,这是更长的解决方案:

f = File.new("file.txt")
text = f.read
if text =~ /string/ then
#relevant code
end

答案 4 :(得分:0)

这只会将文件读取到'string'的第一个外观 并逐行处理 - 不是一次读取整个文件。

def file_contains_regexp?(filename,regexp)
  File.foreach(filename) do |line|
    return true if line =~ regexp
  end
  return false
end