Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » JGsoft PowerGREP

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4

Открыть новую тему     Написать ответ в эту тему

Foss

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
По вопросам "лечения" обращайтесь в топик раздела «Варезник».

JGsoft PowerGREP
Текущая версия: 5.3.2 (08.07.2022)
Производитель: Just Great Software Co. Ltd., Jan Goyvaerts
Официальный сайт | История версий

PowerGREP - мощная программа для быстрого поиска и замены тектовых или бинарных данных в указанных файлах или папках. Умеет подсвечивать синтаксис в зависимости от формата тектового файла (HTML и т.д.), поддерживает работу с многострочными кусками текста, а также регулярные выражения. В справке программы (на английском) есть подробные примеры по созданию работающих регулярных выражений: для поиска email адресов, различного HTML редактирования, анализа логов и т.д
 
Программа распространяется в виде Demo и Retail версий.
Retail версии - это купленные версии, не требующие регистрации.
 
Имеется официальная возможность установить/создать портабельный вариант (только для ретейл-версии) подробнее...

Программы аналогичного назначения:
  • TextPipe

  • Всего записей: 1316 | Зарегистр. 15-04-2003 | Отправлено: 01:01 03-01-2015 | Исправлено: Komandor, 15:27 20-07-2022
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D
    Без танцев с бубном этого точно нет. С танцами - не знаю.
    Знаю, что это гораздо проще реализовано в TextPipe. Специально для этого присутствует соответствующая галочка. Но у него другая беда - "народные" версии в списках замен не поддерживают юникод.

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 22:47 08-10-2017
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Спасибо! Файлы как раз в ANSI))
     
    Добавлено:
    Сам не нашел. А не дано ли случаем для списка задействовать замену в документах — снизу вверх? А то задача специфическая: недостаточно обратить список замен, надо еще снизу вверх заменять.

    Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 23:22 08-10-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D
     
    Если речь о TextPipe, то инвертируйте перед заменой порядок строк (фильтр Reverse line order), а после обработки опять пройдитесь этим фильтром, чтоб вернуть всё взад.
    Да, и здесь тема всё же по PowerGREP. Для TextPipe есть своя.
     
    З.Ы. И я на неё тоже подписан

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 01:11 09-10-2017 | Исправлено: Romul81, 01:12 09-10-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D

    Цитата:
    Romul81
     
    Говоря о PowerGREP: не могли бы вы указать на формат замен, потому что я уже неоднократно искал и вроде, кроме возможности начинать нумерацию с определенной указанной цифры — другого так и не находил? То есть, можно ли будет найти, к примеру <a name="78"> и заменить на <a name="79"> — не указывая в замене "79" буквально? Типа, найти:

    Код:
     
    <a name="(\d+)">
     

    и заменить на —  

    Код:
     
    <a name="%MATCH+1%">
     

     
    Для вашего примера
     
    Найти:

    Код:
    (<a name=")(\d+)(">)

    Заменить:

    Код:
    \1%GROUP2:+1%\3

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 17:56 19-10-2017
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
     
    Вот так спасибо!

    Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 18:14 19-10-2017
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет! Возможно ли переменную подставить в имя файла, чтобы определенное искомое становилось именем файла, в который данные собираются?
     

    Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 11:15 24-01-2018
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D
    Такое есть в Action Type: Split Files.
    Откройте пример из библиотеки "Split logs into files with a certain number of entries".
    В качестве пути можно указывать любые placeholders, напр.:
    r:\TEMP\TXT\%GROUP1%.txt

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 12:53 25-01-2018
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    P.S.
     
    Заметил на вашем скрине одну специфическую ситуацию.
    Вы используете конструкцию ((?!<div ).)*
    Вот именно так никогда не делайте.
    Да, есть похожая конструкция, которая иногда используется (по крайней мере я использую часто) - (?:(?!<div ).)*
    Но даже она здесь не нужна.
     
    Ведь что получается? В вашем случае каждый символ, захваченный конструкцией образует группу, которую движку надо запомнить. Кроме того, в сочетании с жадным квантификатором это означает, что у вас будет столько групп, сколько символов от начала захвата и до конца строки. Далее. Чтоб найти совпадение с rid=" движок после захвата всей строки будет откатываться до тех пор, пока этот самый rid (не) найдёт. Это очень неэффективная регулярка.
     
    Если поступить по простому (и при уверенности, что в значениях атрибутов тега не может быть <>), то гораздо лучше сделать так:

    Код:
    <div\s+id="post-(\d+)[^>]*?[\s'"]rid="

    При этом решаем проблему переносов строк, которые могут быть между тегом и его атрибутами. Паттерн [\s'"] нужен для ситуаций, когда значение предыдущего атрибута "приклеивается" к имени следующего. Да, это не валидный код, но такое бывает.
    Можно использовать, также жадный квантификатор вместо нежадного - зависит от того, насколько много атрибутов в теге (на скрине не видно). Но это не принципиально. В любом случае регулярка будет гораздо легче для движка.  
    Если предусмотреть наличие <>, то выражение надо усложнить. Но опять же, не сильно в ущерб эффективности.  
     
    Пользуйтесь родственной программой RegexBuddy, для того, чтобы понимать, как работает каждая конкретная регулярка (функция дебаггинга).

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 19:19 25-01-2018
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Спасибо! Эту конструкцию использовал как единственно известную из работающих)) А здесь: для извлечения со страниц VK постов конкретного пользователя (по значению id) —
     
    <div id="post-(\d+)((?!<div id="post-).)* id="123456789".*?
          </div>
        </div>
      </div>
    </div>

     
    и ответов на его посты других пользователей на странице —
     
    <div id="post-(\d+)((?!<div id="post-).)* rid="123456789".*?
          </div>
        </div>
      </div>
    </div>

     
    при этом, чтобы между <div id="post- и каскадом из тэгов div — не попадали другие <div id="post- (открывающие посты тэги), не соответствующие по id/rid, которые иначе появлялись. Судя по всему, здесь остаётся применять лишь подсказанную Вами (?:(?!<div ).)*.

    Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 10:11 26-01-2018 | Исправлено: D1D1D1D, 10:19 26-01-2018
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ещё возник вопрос: есть ли возможность пропуска дубликатов для извлекаемых в файл вхождений? Или от них надо уже после избавляться? Пока копирую результаты из вкладки "Results", с активным пунктом "Per unique match", хотя не всегда это подходит, т.к. сбивается оригинальная последовательность вхождений.

    Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 14:19 26-01-2018
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D
    Чисто основываясь на вашем примере. Наверное, будет лучше как-то так:

    Код:
    <div id="post-(\d+)(?:(?!<div id="post-|\br?id="123456789"|</div>\s*</div>\s*</div>\s*</div>)[\s\S])* r?id="123456789".*?</div>\s*</div>\s*</div>\s*</div>

     

    Цитата:
    Ещё возник вопрос: есть ли возможность пропуска дубликатов для извлекаемых в файл вхождений? Или от них надо уже после избавляться?

    Если делаете регулярками, то конечно лучше после.
    А вообще, парсинг HTML регулярками - неблагодарное занятие.
    Если знакомы с DOM/JS/jQuery, то Node.js и Cheerio вам в помощь. В сети масса мануалов. В т.ч. и на русском.

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 02:09 27-01-2018 | Исправлено: Romul81, 02:10 27-01-2018
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
    Благодарю!

    Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 06:57 27-01-2018
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую! В прошлый раз я спрашивал про возможность переменную подставить в имя файла. А можно ли то же самое сделать для части имени файла, в котором проходит поиск? Чтобы часть имени активного файла становилось именем файла, в который данные собираются? То есть, отсюда:

    Код:
    file-106939168-82686=20.html

    сюда:

    Код:
    106939168-82686.html

    Всего записей: 1362 | Зарегистр. 05-04-2010 | Отправлено: 07:59 21-02-2018
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    D1D1D1D
     
    На счёт части не знаю, но есть placeholder %FILENAMENOEXT% Так что вы волне можете указать в выводе что-то типа  

    Код:
    r:\TEMP\TXT\___%FILENAMENOEXT%___%GROUP1%.txt

    А потом вторым проходом по всем файлам произвести нужные замены в пределах ___.*?___
    Это можно сделать хоть в Total Commander.

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 14:10 21-02-2018
    adib777

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, подскажите с решением:
     
    Нужно найти файлы содержащие:
     
    ....[определённый бинарный кусок-1][8 произвольных неизвестных байта][определённый бинарный кусок-2]
     
    и заменить эти байты на:
     
    пустоту (не нули а именно пустоту! - то есть обрезать файл)
     
    Как Искать и заменять ПРЕДОПРЕДЕЛЁННЫЕ бинарные куски - я уже понял, а вот как быть с НЕизвестными бинарными кусками, заключёнными в ИЗВЕСТНЫЕ? С бинарным кодом ведь регулярными выражениями не выкрутишься?

    Всего записей: 17 | Зарегистр. 03-09-2017 | Отправлено: 17:36 06-05-2018 | Исправлено: adib777, 17:44 06-05-2018
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    adib777
    С такой задачей никогда не сталкивался...
    А что если конвертировать бинарник в base64, к примеру, а затем попытаться идентифицировать искомые байты в этом текстовом формате и уже работать с регулярными выражениями и текстовым форматом? А потом обратно декодировать base64...  
    К примеру, находите последовательность байтов ОТ. Удаляете всё остальное - конвертируете в base64.
    То же самое для ДО. Потом конвертируете весь файл и регуляркой ищите нужный диапазон.
     
    Ну в качестве идеи, в какую сторону копать..

    Всего записей: 1326 | Зарегистр. 03-03-2008 | Отправлено: 19:11 06-05-2018
    adib777

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята, нужна помощь:
    1) Как в этой проге отрезать от конца (найденных) файлов ненужный HEX-кусок фиксированной длины?
    2) Что такое "Delimited Binary Data" - что оно может? каков синтаксис? в мануале всё как-то размыто описано, ничего конкретного. Я даже запустить не смог. Как оно работает?

    Всего записей: 17 | Зарегистр. 03-09-2017 | Отправлено: 11:08 12-05-2018 | Исправлено: adib777, 11:12 12-05-2018
    qw12



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как бы одновременно:
    1) Найти данные.
    2) Найти и заменить данные.
    3) Найти и удалить данные.
    4) Все это записать в файл.txt
     
    То есть, 1) это что будет? Action type - Search или Collect Data? А потом указывать цель файл.txt?
    Тогда как шаг 2) организовать? А третий как? После каждого шага указывать файл.txt? Использовать Sequence?
     
    Выполнить каждую из задач последовательно, нет ничего проще. Для этого необязательно PowerGrep использовать. Но, мне нужно это выполнить параллельно, чтобы сохранить и время и место.

    Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 07:28 18-06-2018 | Исправлено: qw12, 07:29 18-06-2018
    Jonmey

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    qw12
    Запустите четыре копии программы, распределив их по отдельным ядрам процессора и выполняйте в каждой копии свою задачу. Будет вам параллельно.
     
    Если же эти операции над одними данными (файлами), то в любом случае будет последовательно, поскольку результат каждой операции идет на вход следующей.
    Чтобы организовать все четыре шага (Actions) в единую инструкцию имеется опция Sequence (одноименная закладка), которая позволяет объединять разнородные операции Actions в виде последовательных шагов (1->2->3->4).

    Всего записей: 1316 | Зарегистр. 17-01-2011 | Отправлено: 09:18 18-06-2018
    qw12



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Jonmey
    Дело в том, что там вот такой раздел, где вероятно, я могу сделать задуманное, разве нет?
     
    https://vgy.me/u/6UUHUI

    Всего записей: 601 | Зарегистр. 04-06-2001 | Отправлено: 10:07 18-06-2018
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4

    Компьютерный форум Ru.Board » Компьютеры » Программы » JGsoft PowerGREP


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru