匹配文件ruby中的模式

时间:2014-08-18 11:28:26

标签: ruby regex

我想搜索文件中的字符串(主要是.txt文件),如果匹配则返回true。我尝试了多种解决方案,如下所示:

# 1.
File.foreach('C:\InstallList.txt').grep /Java/

# 2.
File.open("C:/InstallList.txt") do |f|
  f.each_line do |line|
    if line =~ '/Java/'
      puts "Found Java: #{line}"
    else
      puts "Not found"
    end
  end
end

但这些似乎都不起作用。请帮忙,因为我这似乎是一件非常微不足道的事情,但仍然没有发生。

# 3. 
File.each_line('c:/InstallList.txt') do |li|
  puts li if (li[/Java/])
end

以下是InstallList.txt文件的片段。

  

swMSM 12.0.0.1
  Microsoft Office Live Meeting 2007 8.0.6362.190
  Microsoft .NET Framework 4.5 4.5.50709
  Google Update Helper 1.3.24.15
  流浪者1.6.1
  Windows Azure存储工具 - v2.2.2 2.2.2.0
  Microsoft Visual C ++ 2005 Redistributable 8.0.61001
  AWS Command Line Interface 1.3.17
  Microsoft Visual C ++ 2008 Redistributable - x86 9.0.30729.4148 9.0.30729.4148
  Microsoft Silverlight 5.1.30214.0
  Oracle VM VirtualBox 4.3.10 4.3.10
  Java自动更新程序2.1.9.5
  RapidBoot Shield 1.23

1 个答案:

答案 0 :(得分:3)

您可以将整个文件读成字符串:

if File.read('file.txt') =~ /Java/
  # ...
end

或逐行处理:

if File.foreach('file.txt').any? { |line| line =~ /Java/ }
  # ...
end

如果您正在处理ASCII / UTF-8以外的文件编码,则必须在打开文件时指定它。要打开包含BOM的UTF-16文件,您可以使用:

File.read('file.txt', mode: 'r:BOM|UTF-16:UTF-8')