найти в файлах с помощью ruby ​​или python

В популярном текстовом редакторе есть функция «найти в файлах», которая открывается в диалоговом окне:

Look For: __searchtext__ File Filter: *.txt; *.htm Start From: c:/docs/2009 Report: [ ] Filenames [ ]FileCount only Method: [ ] Regex [ ]Plain Text 

На самом деле это несколько популярных текстовых редакторов.

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

Вопрос: Мне не нравится писать это самостоятельно, так кто-нибудь знает скрипт ruby ​​или python, который принимает те же самые или подобные легкие входные аргументы и делает то, что вы ожидаете?

Я ищу что-то, что делает линейный поиск грубой силы, не имеет ничего общего с индексированными поисками.

  • Как я могу составить график истории строк для git repo?
  • Иррациональное представление чисел на любом языке программирования?
  • Вход в консоль Sublime Text 2
  • `if __name__ == '__main __' 'эквивалент в Ruby
  • Что у Ruby у Python нет, и наоборот?
  • Перевод функции для нахождения всех разделов набора из Python в Ruby
  • Есть ли инструмент статического анализа для Python, Ruby, Sql, Cobol, Perl и PL / SQL?
  • Open Source ETL framework
  • 2 Solutions collect form web for “найти в файлах с помощью ruby ​​или python”

    Я знаю, что вы сказали, что вам не хочется писать это самостоятельно, но для чего это стоит, было бы очень легко использовать os.walk – вы могли бы сделать что-то вроде этого:

     results = [] if regex_search: p = re.compile(__searchtext__) for dir, subdirs, subfiles in os.walk('c:/docs/2009'): for name in fnmatch.filter(subfiles, '*.txt'): fn = os.path.join(dir, name) with open(fn, 'r') as f: if regex_search: results += [(fn,lineno) for lineno, line in enumerate(f) if p.search(line)] else: results += [(fn,lineno) for lineno, line in enumerate(f) if line.find(__searchtext__) >= 0] 

    (это Python, кстати)

    Grepper – это драгоценный камень Ruby от Дэвида А. Блэка для выполнения именно этого:

     g = Grepper.new g.files = %w{ one.txt two.txt three.txt } g.options = %w{ B2 } # two lines of before-context g.pattern = /__search_string__/ g.run g.results.each do |file, result| result.matches.each do |lineno, before, line, after| etc.... 

    Я считаю, что он обходит grep и завершает результаты в Ruby-объектах, что означает, что он принимает те же опции, что и grep. Установить с помощью:

     sudo gem install grepper 
    Python - лучший язык программирования в мире.