Бесплатная программа 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 файлы текущего каталога.

29 мыслей о “nhrt

  • 05.12.2022 в 20:25
    Постоянная ссылка

    Добрый день.
    Эта программа решит подобную задачу?
    Пример.
    Дано:

    Руководство

    Мерседес. Рулевое управление
    Текст

    Требуется:

    Руководство Мерседес. Рулевое управление (добавить к содержимому тайтла, содержимое h1)

    Мерседес. Рулевое управление
    Текст

    Файлов около 50 000, тайтл везде одинаковый, h1 разный.
    Спасибо

    Ответ
    • 05.12.2022 в 20:31
      Постоянная ссылка

      Теги не прошли
      head
      title Руководство /title
      /head
      body
      h1 Мерседес. Рулевое управление /h1
      p Текст /p
      /body
      /html

      Требуется:
      head
      title Руководство Мерседес. Рулевое управление (сделать тайтл+h1) /title
      /head
      body
      h1 Мерседес. Рулевое управление /h1
      p Текст /p
      /body
      /html

      Ответ
      • 07.12.2022 в 05:33
        Постоянная ссылка

        Добрый день, если весь текст html в одну строку, то да, может, через регулярное выражение с группами. Если текст разбит по строкам, то нет, не сможет, тогда лучше скриптом. Python или JScript, например.

        Ответ
  • 16.11.2021 в 02:50
    Постоянная ссылка

    Добрый день. Меня заинтересовали возможности этой программы но из-за командной строки боюсь не освою ее. Хочу спросить об одной конкретной функции.

    Допустим есть текстовый файл, *.json, в нем обычный UTF8 текст. Около 800 очень длинных строчек. В некоторых строчках присутствует текст
    Variables.value(111)][72] = ‘夜這い’
    и это не вся строчка и лишь ее часть. Нужно найти весь подобный текст, заменить японский текст на заранее указанный русский текст, и в конце русского текста добавить нумерацию обозначающую в какая по счету это замена. Примерно так должно получится
    Variables.value(111)][72] = ‘Русский текст 1’
    Variables.value(111)][72] = ‘Русский текст 2’
    Variables.value(111)][72] = ‘Русский текст 3’ и так далее.

    Это можно сделать с помощью этой программы? И если да, то как

    Ответ
  • 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 не заводится касательно работы скриптов…

    Ответ
  • 09.02.2017 в 23:51
    Постоянная ссылка

    Как сделать переход на следующую строчку после замены на G00 &
    -spt:»G01″ -i -t:»G00″

    Ответ
    • 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 в 19:18
          Постоянная ссылка

          Я бы сделал заменой регулярными выражениями -formattedtext (-ft), вставляя точку между группами $1 и $2:

          -sre:"(\d+)(\d)" -ft:"$1.$2"

          Входной файл

          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 не будет опубликован. Обязательные поля помечены *