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

Строка поиска может быть задана обычным текстом (plain text) или регулярным выражением. Заменяющий текст может быть задан строкой или содержимым текстового файла.

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

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

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

  • 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. Программа не требуется установки.

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

Информация по nhreplace

Загрузка 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: 13 комментариев

    • 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.

      Ответить

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

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