nhrt – консольная программа для замены текста в файлах и преобразования кодировок текстовых файлов.
Новая версия программы nhrt v2.14.0.
Файлы новой версии nhrt
Скачать новую версию программы можно по ссылке ниже.
nhrt binaries
Исполняемые файлы nhrt.exe, nhconv.exe. Требуется установка файлов вручную. Работает в Microsoft Windows XP SP3 и старше. ZIP 367 кБ
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"