Как оценить в Ultraedit регулярных выражений заменить

В Ultraedit с использованием Perl Regex, я пытаюсь заменить строки DATA0 с DATA8, DATA1 с DATA9, и так далее. Я знаю, как добиться совпадения в диалоге поиска Ultraedit, используя DATA\d,

Для того, чтобы захватить цифру, я использую DATA(\d)и в поле "Заменить на:" я могу получить доступ к группе с $1, DATA$1+8 но это, очевидно, приводит к тексту DATA0+8, что имеет смысл.

Есть eval() что можно сделать в диалоговом окне замены Ultraedit, чтобы изменить захваченную групповую переменную $1?

Я понимаю, что это можно сделать в интеграции javascript с Ultraedit, но я бы предпочел сделать это из коробки из диалога замены.

2 ответа

Решение

Нет, UltraEdit не может этого сделать.

Вы могли бы на самом деле использовать Perl

perl -i.bak -pe"s/DATA\K(\d+)/$1+8/eg" "C:\..."       5.10+

perl -i.bak -pe"s/(DATA)(\d+)/$1.($2+8)/eg" "C:\..."

Текстовые редакторы, такие как UltraEdit, не поддерживают оценку формулы во время операции замены. Для этого требуется скрипт и интерпретатор скриптов, такой как Perl или JavaScript.

UltraEdit имеет встроенный интерпретатор JavaScript. Поэтому эту задачу можно выполнить также с помощью UltraEdit, используя скрипт UltraEdit, например, приведенный ниже.

if (UltraEdit.document.length > 0)  // Is any file opened?
{
   // Define environment for this script.
   UltraEdit.insertMode();
   UltraEdit.columnModeOff();

   // Move caret to top of the active file.
   UltraEdit.activeDocument.top();

   // Defined all Perl regular expression Find parameters.
   UltraEdit.perlReOn();
   UltraEdit.activeDocument.findReplace.mode=0;
   UltraEdit.activeDocument.findReplace.matchCase=true;
   UltraEdit.activeDocument.findReplace.matchWord=false;
   UltraEdit.activeDocument.findReplace.regExp=true;
   UltraEdit.activeDocument.findReplace.searchDown=true;
   if (typeof(UltraEdit.activeDocument.findReplace.searchInColumn) == "boolean")
   {
      UltraEdit.activeDocument.findReplace.searchInColumn=false;
   }

   // Search for each number after case-sensitive word DATA using
   // a look-behind to get just the number selected by the find.
   // Each backslash in search string for Perl regular expression
   // engine of UltraEdit must be escaped with one more backslash as
   // the backslash is also the escape character in JavaScript strings.
   while(UltraEdit.activeDocument.findReplace.find("(?<=\\bDATA)\\d+"))
   {
      // Convert found and selected string to an integer using decimal
      // system, increment the number by eight, convert the incremented
      // number back to a string using again decimal system and write the
      // increased number string to file overwriting the selected number.
      var nNumber = parseInt(UltraEdit.activeDocument.selection,10) + 8;
      UltraEdit.activeDocument.write(nNumber.toString(10));
   }
}
Другие вопросы по тегам