Бесплатная программа nhrt (nhutils replace text, ранее называлась nhreplace) заменяет текст в файлах или в потоке stdin.

Возможности

Программа nhrt ищет заданный образец текста в файле, в качестве фрагмента может быть задан обычный текст (plain text), форматированный текст (с использованием символов форматирования, таких как перевод строки) или регулярного выражения. Текст для поиска задаётся в параметре командной строки или в текстовом файле.

Программа заменяет найденные фрагменты на заданный заменяющий текст, это может быть обычный текст, форматированный текст или группы регулярного выражения. Заменяющий текст задаётся строкой или содержимым текстового файла

Программа может обрабатывать множество файлов, по маске и в подкаталогах.

В дополнение к режиму замены, программа может вставлять текст перед найденным фрагментов или после него.

Пакетное выполнение нескольких команд поиска/замены за один проход.

Программа работает из командной строки Windows и может быть использована в пакетных файлах.

Кодировки текстовых файлов

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

  • ANSI (Windows-1251 для русской версии Windows),
  • OEM (CodePage 866 для русской версии Windows),
  • Unicode (UTF-16),
  • UTF-8,
  • кодировки, заданные номером, например, 1252 — западно-европейские языки (французский и др).

Преобразование кодировки может выполняться одновременно с заменой текста, например: считать файл в кодировке utf-8, выполнить замену текста, затем сохранить в кодировке Unicode. Также при замене текста на содержимое файла программа позволяет обрабатывать файлы в разных кодировках, например, одним действием вставить текст из файла с OEM кодировкой в файл с кодировкой Unicode.

Командные файлы и скрипты

Программа ориентирована на пакетное применение в командных CMD файлах, скриптах JScript/VBScript и других автоматических решениях:

  • программа не требует интерактивного ввода информации от пользователя
  • все режимы задаются через параметры командной строки
  • возможность обработки файлов по маске файлов с использованием символов подстановки ? и *
  • возможность обработки подкаталогов (recurse subdirectories)

Для программы оказывается техническая поддержка в виде открытого форума

Работа программы проверена в Windows XP, Windows Vista 32/64, Windows 7 32/64. Программа не требуется установки.

С версии nhrt v2.2 добавлена возможность преобразования кодировки между OEM и ANSI «на лету» преобразованием входного потока stdin, чтобы обеспечить совместную работу командных файлов (кодировка OEM/866) с программами, работающими в кодировке ANSI. Возможность реализована в виде отдельного исполняемого файла nhconv.exe (входит в загрузку nhreplace), например, следующая команда преобразует вывод dir в кодировку ANSI:

cmd /c dir | nhconv

Узнать больше о программе nhrt

Загрузка nhrt

Справка nhrt

Вопросы и ответы по nhrt

Примеры использования nhrt

Примеры применения программы nhrt: замена статическим текстом, замена файлом, командный файл для сборки html файлов из фрагментов.

Поиск регулярного выражения и замена статическим текстом

Замена дат 2000-2019 гг. на 01.03.2009 в *.txt и *.cmd файлах текущего каталога:

nhrt -sre:"[0-3]?[0-9]\.[0-1]?[0-9].20[0-1][0-9]" -t:"01.03.2009" *.txt *.cmd

Первый параметр задает регулярное выражение для поиска. Предполагается дата в формате d.M.yyyy.

Второй параметр задает статическую заменяющую строку.

Третий и четвертый параметры задают маски обрабатываемых файлов.

Поиск строки и замена содержимым файла

Замена строки ref1 на содержимое файла content1.txt во всех html файлах текущего каталога:

nhrt -s:"ref1" -f:content1.txt *.htm *.html

Первый параметр задает фиксированный текст ref1, подлежащий замене.

Второй параметр задает заменяющий файл content1.txt.

Третий параметр задает маску обрабатываемых файлов — все htm и html файлы текущего каталога.

nhrt: 24 комментария

  • 25.09.2019 в 05:43
    Постоянная ссылка

    Здравствуйте! Возможна ли пакетная замена многострочного блока в файлах?
    Допустим, есть несколько десятков страниц с одинаковым блоком «меню» (меню прописано не одним десятком строк).
    Нужно поменять меню во всех файлах.
    Возможно ли «скормить» программе файл с большим текстом, подлежащим замене, и второй файл — с текстом, который нужно вставить вместо.
    Вариант сборки файлов из html в данном случае не подходит, потому что нет маленькой строки-маркера, которую нужно найти и заменить на блок текста. Нужно заменить именно один блок текста на другой блок текста.

    Ответить
    • 25.09.2019 в 09:14
      Постоянная ссылка

      Здравствуйте, да, конечно!
      Файл с текстом для поиска задаётся через -spf, файл с заменяющим текстом через -f-f, файлы для обработки по маске.

      Ответить
    • 22.05.2019 в 20:14
      Постоянная ссылка

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

      Ответить
  • 21.11.2018 в 17:57
    Постоянная ссылка

    Добрый день,
    прошу помочь с задачей:
    в html файле регуляка — href="/resume/(.*?(\d{8}).html") находит все интересующие вхождения.
    Как реализовать поиск с последующей заменой всех вхождений только на цифровые значения с помощью nhutils, спасибо

    Ответить
    • 22.11.2018 в 21:52
      Постоянная ссылка

      Добрый день, не очень понял, что значит, с заменой только на цифровые значения? Вероятно, это про capture groups. Можете объяснить подробнее или написать пример, что на что должно заменяться?

      Ответить
  • 29.08.2018 в 12:58
    Постоянная ссылка

    привет… мне нужно сделать тысячи замен искомого на GUID-значение… вообще делаю замены с помощью nhrt, но сейчас нет в нем возможности генерации GUID-значений при замене… не сложно ли добавить такую возможность?

    перейдя с windows на linux, nhrt лучшее что работает на замену пакетным заменам по шаблону, которые я делал в AkelPad, ибо AkelPad в linux не заводится касательно работы скриптов…

    Ответить
    • 11.02.2017 в 08:48
      Постоянная ссылка

      Если вопрос в том, чтобы вставить в заменяемый текст перевод строки, то для этого лучше использовать параметр -escapetext (-et), который поддерживает символы \",\r,\n,\\,\xHH,\uHHHH для замены:

      -spt:"G01" -i -et:"G00\r\n"

      Если вопрос в чем-то другом, напишите подробнее.

      Ответить
      • 11.02.2017 в 14:51
        Постоянная ссылка

        Да. Вы меня правильно поняли. Всё работает. И ещё вопросик. Есть набор произвольных чисел, к примеру 1521, 2734, 152. Как сделать так что бы после единиц появилась точка ? То есть должно получится:
        152,1
        273,4
        15,2

        Ответить
          • 11.02.2017 в 21:06
            Постоянная ссылка

            Всё заработало. Спасибо вам огромное. И ещё возник вопрос. Есть огромное количество текста типа:
            N1
            N2
            N3
            N4

            N100
            Но по какой то причине запись типа:
            -sre:»N[0-999]» -t:»»
            удаляет только строки от N1 до N9, а N10 превращает в 0. Как это исправить ?

          • 11.02.2017 в 21:39
            Постоянная ссылка

            Квадратные скобки в регулярном выражении задают набор символов (а не диапазон чисел), поэтому ваше выражение задаёт выражение из одной цифры.
            Здесь нужно
            N\d+ – ненулевое число цифр или
            N\d{1,3} – от одной до трёх цифр.

  • 14.01.2017 в 18:31
    Постоянная ссылка

    Помогите пожалуйста разобраться с заменой по регулярному выражению
    Нужно найти все вхождения:
    Text1…неизвестное_количество_пробелов…Text2
    и заменить на:
    Text1_один_пробел_Text2

    Заранее благодарю!

    Ответить
    • 09.10.2016 в 21:08
      Постоянная ссылка

      В смысле «не работает в Windows XP SP2»? По тексту написано, что работа программы nhreplace проверена в нескольких версиях Windows, включая Windows XP.

      Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *