nhrt – консольная программа для замены текста в файлах и преобразования кодировок текстовых файлов.
Новая версия программы nhrt v2.14.0.
Файлы новой версии nhrt
Скачать новую версию программы можно по ссылке ниже.
nhrt binaries
Включает исполняемые файлы nhrt.exe, nhconv.exe и bat файлы с примерами использования . Требуется установка файлов вручную: скопируйте файлы в подходящую папку. Работает в Microsoft Windows XP SP3 и старше. ZIP 367 кБ
Содержит исполняемые файлы программ и bat файлы с примерами использования. Требуется установка вручную: скопируйте файлы в подходящую папку.
nhutils, спасибо!
Сразу я так и писал, но программа не отрабатывала, замен не было. Пришлось кавычки экранировать. Так же и в случае просто якоря $.
Поэтому пришел к варианту:
-sre:"Первый канал \(\+1\)\r?$" -t:"1 канал" -i -occ:1
Так вроде всё нормально обрабатывается.
Да, это я понял. Спасибо.
Здравствуйте.
В описании программы указано «..требуется установка файлов вручную»
Подскажите, пожалуйста, как именно правильно скомпилировать, чтобы получился файл nhreplace.exe ?
Здравствуйте, «требуется установка файлов вручную» означает, что нужно вручную распаковать исполняемые файлы из скачанного zip архива, положить в нужную папку, прописать путь в PATH.
Компилировать не требуется. nhreplace.exe — это старое название программы, она была переименована в nhrt.exe, начиная с версии 2.9 https://nhutils.ru/blog/nhrt-v2-9-0/
Спасибо за ответ! И огромный респект за программу. Очень нужная утилита во многих случаях. Жаль, что мало кто о ней знает.
Как раз собирался писать скрипт vbs для редактирования плейлистов и случайно натолкнулся на Вашу программу. Это то, что «доктор прописал»
Скрипт получался огромным, во входном файле могло требоваться и до 1000 замен, а в коде для каждой замены 15 строк.
В текстовом файле для параметра -list Вашей программы получается гораздо меньше.
Но никак не могу разобраться как конкретно указать выражение, которое нужно заменить, чтобы замена шла только если будет найдено всё указанное выражение.
Например в строках «Первый канал», «Первый канал HD», «Первый канал (+1), если не указывать -occ:1, поменяются все найденные вхождения. Но если указать так:
-set:"Первый канал" -t:"1 канал" -i -occ:"1"
-set:"Первый канал HD" -t:"1 канал HD" -i -occ:"1"
-sre:"Первый канал \(\+1\)" -t:"1 канал (+1)" -i -occ:"1"
то замена выполняется только во втором и третьем вхождении, первое почему то не изменяется.
В разных плейлистах эти строки могут быть на разных местах, их нужно как-то конкретно указать.
Пробовал добавлять конец строки (выражения для замены в плейлисте всегда в конце строки) так:
-sre:"Первый канал \(\+1\)$" -t:"1 канал (+1)" -i -occ:"1"
Но при этом замена не выполняется.
Извините, может немного сумбурно объяснил. Вкратце: для замены нужно указать конкретное выражение, чтобы не трогать похожие.
Можно ли так сделать, подскажите, пожалуйста ?
Вроде разобрался, не знаю насколько правильно, добавил в конец выражения для замены конструкцию с якорем \r?$
Получилось так:
-sre:"Первый канал\r?$" -t:"1 канал" -i -occ:1
Вроде отрабатывает нормально.
не очень понятно, что имеется в виду, потому что программа nhrt заменяет всё заданное выражение поиска. то ли подразумевается совпадение всей строки в файле со строкой поиска, то ли что-то другое…
вообще, в списке надо поставить образцы в другом порядке, чтобы более короткая строка поиска была в списке последней и не срабатывала вместо более длинных:
-set:"Первый канал HD" -t:"1 канал HD" -i -occ:"1"
-sre:"Первый канал \(\+1\)" -t:"1 канал (+1)" -i -occ:"1"
-set:"Первый канал" -t:"1 канал" -i -occ:"1"
вместо регулярного выражения
-sre:"Первый канал \(\+1\)"
проще написать обычный текст
-spt:"Первый канал (+1)"
чтобы указать, что образец находится в конце строки, в регулярных выражениях пишут:
-sre:"Первый канал$"
здесь грамматика описывается TR1 Regular Expressions
если конец строки указывать в обычном тексте, то для Windows можно сделать:
-set:"Первый канал\r" -t:"1 канал\r"