Apache Nifi - изменение пути в атрибуте с помощью UpdateAttribute Processor - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу изменить атрибут Flowfile с помощью процессора UpdateAttribute.

Атрибут «имя файла»:

backup/int_backup/storage/teamname/toolname/path/bdsd9d83-dvvv8-41d9-a271-95b2284bd56c/20200420125822_11.zip

Начало отрезка строки и между teamname и toolname должна быть другая папка с именем archive, например:

teamname/archive/toolname/path/bdsd9d83-dvvv8-41d9-a271-95b2284bd56c/20200420125822_11.zip

Я создал регулярное выражение, которое идентифицировало имя команды:

/[^/]*/[^/]*/([^/]*)/

И регулярное выражение, которое отмечает все после третье "/":

/[^/]*/[^/]*/[^/]*/([^*]*)

Я попытался создать строку, добавив:

${filename:replaceAll('/[^/]*/[^/]*/([^/]*)/', '$1')}/archive/${filename:replaceAll('/[^/]*/[^/]*/[^/]*/([^*]*)', '$1')

Однако результат не является результатом регулярного выражения, это само регулярное выражение.

1 Ответ

1 голос
/ 28 апреля 2020

Вы можете использовать

${filename:replaceAll('^(?:[^/]+/){3}([^/]+)(.*)', '$1/archive$2')}

См. Демоверсию regex

Подробности

  • ^ - начало строки
  • (?:[^/]+/){3} - три вхождения 1+ символов, отличных от /, а затем /
  • ([^/]+) - группа 1 ($1): один или больше символов, отличных от /
  • (.*) - Группа 2 ($2): остальная часть строки.
...