Ruby: поиск регулярного выражения в нескольких файлах в нескольких каталогах - PullRequest
6 голосов
/ 13 февраля 2011

Пожалуйста, прости мое невежество, я новичок в Ruby.

Я знаю, как искать строку или даже отдельный файл с регулярным выражением:

str = File.read('example.txt')
match = str.scan(/[0-9A-Za-z]{8,8}/)

puts match[1]

Я знаю, как искать статическую фразу в нескольких файлах и каталогах

pattern = "hello"

Dir.glob('/home/bob/**/*').each do |file|
    next unless File.file?(file)
        File.open(file) do |f|
            f.each_line do |line|
                puts "#{pattern}" if line.include?(pattern)
        end
    end
end

Я не могу понять, как использовать мое регулярное выражение для нескольких файлов и каталогов. Любая помощь очень ценится.

1 Ответ

5 голосов
/ 13 февраля 2011

Ну, вы совсем близко. Сначала сделайте шаблон объектом Regexp:

pattern = /hello/

Или, если вы пытаетесь создать регулярное выражение из строки (как передано в командной строке), вы можете попробовать:

pattern = Regexp.new("hello")
# or use first argument for regexp
pattern = Regexp.new(ARGV[0])

Теперь, когда вы ищете, line - это строка. Вы можете использовать match или scan, чтобы получить результаты, соответствующие вашему шаблону.

f.each_line do |line|
  if line.match(pattern)
    puts $0
  end
  # or
  if !(match_data = line.match(pattern)).nil?
    puts match_data[0]
  end
  # or to see multiple matches
  unless (matches = line.scan(pattern)).empty?
    p matches
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...