В этой статье я покажу пример замены текста с использованием параметра -ft/-formattedtext, добавленного в nhreplace v2.8.0. Пример основан на запросе пользователя программы, после которого эта функция была добавлена в программу.
Эта возможность полезна, когда требуется найти текст и заменить только определённую его часть. Документация по регулярным выражениям и format flags доступна по ссылке, а пример показан ниже.
В запросе требовалось, чтобы программа с помощью одной команды находила в файле вхождения:
<lang>RU-ru</lang>
или
<lang>Rus</lang>
и заменяла их на:
<lang>Ru</lang>
Используя регулярные выражения, можно получить этот результат следующим образом:
- разбить выражение на несколько частей – capture group, каждая из которых заключается в круглые скобки, например:
(<lang>)(RU-ru|Rus)(</lang>)
; - сформировать заменяющий текст из 1-й и 3-й групп, вставив между ними простой текст Ru.
Команда будет выглядеть так ($1 и $3 означают первую и третью группы):
-sre:"(<lang>)(RU-ru|Rus)(</lang>)" -ft:"$1ru$3"
Групп для поиска может быть и больше, например, чтобы исключить лишние пробелы:
-sre:"(<lang>)(\s*)(RU-ru|Rus)(\s*)(</lang>)"
При формировании заменяющего текста только из групп 1 и 5 пробелы не будут включены в заменяющий текст:
-ft:"$1ru$5"
А как заменить все разные значения которые я обозначил *(звездочкой): value=»0x******»
Чтобы получилось FFF87A :
разве нет команды которая учитывает не только числа но и буквы?
Я думал это будет работать:
-sre:"0x[0-Z][0-Z][0-Z][0-Z][0-Z][0-Z]" -t:"0xFFF87A"
куда исчез пример?
value="0x703737"
value="0x483f52"
value="0x374468"
заменить на
value="0xFFF87A"
value="0xFFF87A"
value="0xFFF87A"
Обычно 16-ричные цифры записывают в регулярках так:
[0-9A-F]
Соответственно, команда для замены числа из 6 цифр:
-sre:"0x[0-9A-Z]{6}" -t:"0xFFF87A"
Проверить регулярное выражение — см. обзор онлайн инструментов для регулярных выражений
В целом, по синтаксису лучше посмотреть в справке, здесь ссылка на документацию