Эта страница содержит ответы на часто задаваемые вопросы по программе nhreplace. Если вы не нашли ответ на свой вопрос, напишите его в комментариях внизу страницы (регистрация необходима для защиты от спама).

Какой синтаксис регулярных выражений используется в программе nhreplace?

Программа nhreplace использует синтаксис ECMAScript, описание можно найти в статье TR1 Regular Expressions.

Как выполнить замену символа табуляции пробелами?

Начиная с версии nhreplace v2.7, программа позволяет указывать непечатаемые символы по их коду, следующая команда заменяет каждый символ табуляции (задается параметром set=search escape text, т.к. использует управляющую последовательность вида \xHH) на 4 пробела (строка замены задается параметром t=text, т.к. не содержит управляющих символов):

nhrplc.exe -set:"\x09" -t:"    " *.cpp

Если требуется выполнить в текстовом файле поиск и замену для нескольких различных строк, например, для 100 различных образцов для поиска, как это можно сделать более эффективно, чтобы не запускать программу многократно, т.е. 100 раз, для обработки одного и того же файла?

Начиная с версии nhreplace v2.5, в программе присутствует возможность произвести поиск и замену текста для множества различных строк, при этом список операций поиска и замены задается в отдельном файле, то есть может иметь произвольный размер, например, и 100, и более шаблонов поиска с соответствующими строками для замены. Режим групповой замены текста задается с помощью аргумента -list, в котором также указывается имя файла со списком строк поиска/замены. Подробнее см. раздел справки Замена текста по списку.

Как выполнить замену текста в текущем каталоге и его подкаталогах одной командой?

Программа nhreplace до версии v2.3 не имеет режима обработки подкаталогов, этот режим будет добавлен в следующей версии, а пока можно реализовать обработку подкаталогов в командном файле с помощью команды FOR, подробнее см. Замена текста в подкаталогах (cmd).

Начиная с версии nhreplace v2.4, можно использовать параметр -r.

Как выполнить удаление (а не замену) найденного текста?

Удаление текста можно реализовать, выполняя замену пустым файлом, подробнее см. Замена текста файлом.

В версии v2.8.1 добавлен параметр -e (-erase) для удаления текста.

Как удалить лишние (дублирующиеся) переводы строк?

Удаление дублирующихся переводов строк можно реализовать, выполняя поиск по регулярному выражению, а замену файлом, состоящим из перевода строки, подробнее см. Замена текста файлом.

 

Вопросы и ответы по nhrt: 9 комментариев

  • 22.10.2016 в 13:53
    Постоянная ссылка

    Здравствуйте,
    Не могу разобраться в синтаксисе, умеет-ли программа искать и менять строки целиком?

    Пример:
    Нужно найти:

    20
    18
    1

    Заменить на:

    9
    20
    18

    Ответить
    • 24.10.2016 в 18:08
      Постоянная ссылка

      Здравствуйте, в части регулярных выражений программа реализует все возможности стандартной библиотеки, в том числе якоря ^ и $ для отметки начала и конца строки. Надо сказать, что якорь конца строки $ имеет такую особенность, что соответствует концу строки \n, но не \r\n, см. End of String or Line: $.
      В итоге, заменить всю строку можно так:

      nhrplc -sre:"^28\r?$" -et:"06\r" -o:d test_file.txt
      Ответить
      • 26.10.2016 в 12:19
        Постоянная ссылка

        Не могу разобраться.
        Мне нужно найти и заменить последовательность из трех строк (не каждую строку по отдельности)
        Не подскажите примером?

        Так не отрабатывает… Просто я логики синтоксиса вообще не понимаю.
        nhrplc -sre:»^20\r?$^18\r?$^1\r?$» -et:»^9\r?$^20\r?$^18\r?$» -o:d test.txt

        Ответить
        • 26.10.2016 в 19:58
          Постоянная ссылка

          Если надо заменить сразу три строки, то так:

          nhrplc -set:"20\r\n18\r\n1\r\n" -et:"9\r\n20\r\n18\r\n" -o:d test.txt

          Отличие от замены внутри одной строки такое, что указываются символы перевода строки \r\n для каждой строки.

          Ответить
  • 07.10.2016 в 14:45
    Постоянная ссылка

    Добрый день. Никак не разберусь с синтаксисом и «форматированным» текстом (-ft:)
    простой пример — есть текст «crm user name=ivan» значение после равно переменное,
    его то и хочу поменять. делаю так
    nhrplc -sre:»(user\sname)(\W)» -i -ft:»$1user name=%username%$5″ file.txt
    а получаю userpetrivan
    — совсем ничего не понимаю) У Вас вообще нигде это не описано (
    \= в искомом не понятно как правильно вписать — перестает срабатывать, и $1 $5 не ясны.
    в итоге у меня новое значение встает на место символа равно (старое значение остается)

    Ответить

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

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