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

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

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

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

  • Как удалить файл или папку?
  • Python - write () и writelines () и конкатенированные строки
  • Невозможно загрузить видео с YouTube
  • Запись списка списков Python в файл csv
  • Соединение SSH с Python 3.0
  • Как читать последний МБ очень большого текстового файла
  • Я хотел бы сделать то же самое, но использовать класс python или ruby ​​вместо текстового редактора. Таким образом, эту же самую простую операцию с мозгом можно запустить из сценария на любой платформе, поддерживающей ruby ​​или python.

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

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

  • Функция поиска последовательности python
  • Заменить строку в содержимом файла
  • Python: модуль для создания файла блокировки на основе PID?
  • Проверка существования файла на удаленном SSH-сервере с использованием Python
  • Python командной строки 'входной поток файла'
  • Как я re.search или re.match для целого файла, не читая все это в памяти?
  • 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 - лучший язык программирования в мире.