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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    adib777

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подробнее...
    Romul81
    Помогите составить регулярное выражение для поиска и замены:
    Нужно добавить ВСЕГО один символ в определённой строке:
    ДО:

    Код:
    <td class="postcolor" id="post1234567890"><video src="../../www.youtube.com/watch@v=aBc159XyZ" controls="controls" width="560" height="315" >                      <br><br>-----<br><a href="topic.php@forum=1&topic=75" target="_blank">Это происходит потому что</a></td>

     
    ПОСЛЕ:

    Код:
    <td class="postcolor" id="post1234567890"><video src="../../www.youtube.com/watch@v=aBc159XyZ" controls="controls" width="560" height="315" />                      <br><br>-----<br><a href="topic.php@forum=1&topic=75" target="_blank">Это происходит потому что</a></td>

     
     
    То есть: нужно закрыть тег [<video src=], заменив ТОЛЬКО ПЕРВЫЙ ВСТРЕЧНЫЙ [>] на [/>]
    Остальной код может быть иным (адреса, форматирование, текст ), но каким бы он ни был, всё остальное должно оставаться НЕ тронутым. [/more]

    Всего записей: 17 | Зарегистр. 03-09-2017 | Отправлено: 22:54 10-09-2017 | Исправлено: adib777, 23:27 10-09-2017
    Romul81



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

    Код:
    (<video\b[^>]*\S)\s*(?=>)

    Заменить:

    Код:
    \1 /

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 23:38 10-09-2017
    adib777

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81
     
    Спасибо большое!!!!
    Применил с небольшой поправкой на гипер-редактирование:
     
    Найти:

    Код:
    (<video src="[^>]*)(/>| >)

     
    Заменить на:

    Код:
    \1 />

    Всего записей: 17 | Зарегистр. 03-09-2017 | Отправлено: 22:15 12-09-2017
    D1D1D1D

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Интересует, есть ли для вкладки "Sequence" возможность настройки замен по списку так, чтобы по каждому пункту списка замена (или попытка замены) производилась только один раз? То есть, чтобы каждый пункт при соответствии вхождения производил единственную замену (несмотря на то, что в том же файле ниже могли быть ещё соответствия) и передавал действие другому пункту?

    Всего записей: 1368 | Зарегистр. 05-04-2010 | Отправлено: 22:27 08-10-2017 | Исправлено: D1D1D1D, 22:28 08-10-2017
    Romul81



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

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

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

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



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

    Всего записей: 1327 | Зарегистр. 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

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

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

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

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

    Всего записей: 1368 | Зарегистр. 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

    Всего записей: 1327 | Зарегистр. 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, для того, чтобы понимать, как работает каждая конкретная регулярка (функция дебаггинга).

    Всего записей: 1327 | Зарегистр. 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 ).)*.

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

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

    Всего записей: 1368 | Зарегистр. 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 вам в помощь. В сети масса мануалов. В т.ч. и на русском.

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

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

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

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

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

    сюда:

    Код:
    106939168-82686.html

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



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

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

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

    Всего записей: 1327 | Зарегистр. 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.
    То же самое для ДО. Потом конвертируете весь файл и регуляркой ищите нужный диапазон.
     
    Ну в качестве идеи, в какую сторону копать..

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 19:11 06-05-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