[comment]: # translation:outdated

[comment]: # attributes: notoc

[comment]: # (terms: fmtnum, fmttime, iregsub, regsub)

[comment]: # ({09129833-0458cee0})
# 1 Макро функције

#### Преглед

Макро функције нуде могућност прилагођавања вредности [macro](/manual/config/macros) (на пример, скраћивање или издвајање одређених подстрингова), што олакшава рад са њима.

Синтакса макро функције је:

     {macro.func(params)}

где

-   **macro** - макро који треба прилагодити;
-   **func** - функција коју треба применити (погледајте [supported functions](#supported-functions));
-   **params** - листа параметара функција раздвојених зарезима, који морају бити **под двоструким наводницима** ако:
   -   почињу размаком или двоструким наводницима;
   -   садрже затварајуће заграде или зарез.

На пример:

     {{TIME}.fmttime(format,time_shift)}
     {{ITEM.VALUE}.regsub(pattern, output)}
     {{$USERMACRO}.regsub(pattern, output)}
     {{#LLDMACRO}.regsub(pattern, output)}

Макро функције су подржане за

-   [Уграђене макрое](/manual/appendix/macros/supported_by_location)
-   [Корисничке макрое](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [Макрое за откривање ниског нивоа](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [Изразне макрое](/manual/appendix/macros/supported_by_location#other-macro-types)

Макро функције се могу користити на свим локацијама које подржавају наведене макрое.
Ово важи осим ако није експлицитно наведено да се очекује само макро
(на пример, приликом конфигурисања [макроа хоста](/manual/config/hosts/host#configuration) или правила откривања ниског нивоа [филтери](/manual/discovery/low_level_discovery#filter)).

Подржава се једна функција по макроу; више макро функција у ланцу није подржано.

:::noteclassic
Погледајте [примере избегавања](/manual/appendix/escaping) за случајеве када се макро функције користе унутар других контекста (функција, кључ ставке, други макро итд.).
:::

[comment]: # ({/09129833-0458cee0})

[comment]: # ({f9dac088-b8563887})
#### Подржане функције

Функције су наведене без додатних информација. Кликните на функцију да бисте видели све детаље.

|Function|Description|
|--|--------|
|[btoa](#btoa)|Кодирање вредности макроа у Base64 кодирање.|
|[fmtnum](#fmtnum)|Форматирање броја за контролу броја цифара које се штампају после децималне тачке.|
|[fmttime](#fmttime)|Форматирање времена.|
|[htmldecode](#htmldecode)|Декодирање вредности макроа из HTML кодирања.|
|[htmlencode](#htmlencode)|Кодирање вредности макроа у HTML кодирање.|
|[iregsub](#iregsub)|Издвајање подстринга помоћу подударања регуларног израза (без разлике између великих и малих слова).|
|[lowercase](#lowercase)|Трансформација знакова вредности макроа у мала слова.|
|[regrepl](#regrepl)|Замена карактера/подстринга у вредности макроа.|
|[regsub](#regsub)|Издвајање подстринга помоћу регуларног израза (разликовање великих и малих слова).|
|[tr](#tr)|Транслитерација знакова вредности макроа.|
|[uppercase](#uppercase)|Трансформација знакова вредности макроа у велика слова.|
|[urldecode](#urldecode)|Декодирање вредности макроа из URL кодирања.|
|[urlencode](#urlencode)|Кодирање вредности макроа у URL кодирање.|

[comment]: # ({/f9dac088-b8563887})

[comment]: # ({91058888-c1632a9e})
#### Детаљи функције

Опционални параметри функције су означени са < >.

[comment]: # ({/91058888-c1632a9e})

[comment]: # ({d8d5fafe-6e2e93df})
##### btoa {#btoa}

Кодирање макро вредности у Base64 кодирање. Base64 кодирање је метод за представљање бинарних података као текста, користан за чување и безбедан пренос бинарног садржаја преко текстуалних протокола.

Пример:

  {{ITEM.VALUE}.btoa()} - ће Base64 кодирати вредност попут "zabbix" у "emFiYml4"

[comment]: # ({/d8d5fafe-6e2e93df})

[comment]: # ({31245134-4df3fd19})
#### fmtnum(digits) {#fmtnum}

Форматирање броја за контролу броја цифара које се штампају после децималног зареза.

Параметри:

-  **digits** - број цифара после децималног зареза. Важећи опсег: 0-20. Завршне нуле неће бити произведене.

Примери:

   {{ITEM.VALUE}.fmtnum(2)} - вратиће "24.35" од примљене вредности од "24.3483523"
   {{ITEM.VALUE}.fmtnum(0)} - вратиће "24" од примљене вредности од "24.3483523"

[comment]: # ({/31245134-4df3fd19})

[comment]: # ({0e2768a5-3caa4dc7})
##### fmttime(format,<time\_shift>) {#fmttime}

Форматирање времена.\
Имајте на уму да се ова функција може користити са макроима који се решавају у вредност у једном од следећих временских формата:

- `hh:mm:ss`
- `yyyy-mm-ddThh:mm:ss[tz]` (ISO8601 standard)
- UNIX временска ознака

Параметри:

-  **format** - обавезни стринг формата, компатибилан са форматирањем функције `strftime`;
-  **time\_shift** (опционо) - временски помак примењен на време пре форматирања; треба да почиње са `-<N><time_unit>` или `+<N><time_unit>`, где је:
-  `N` - број временских јединица за додавање или одузимање;
-  `временска_јединица` - h (сат), d (дан), w (недеља), M (месец) или y (година).

Коментари:

- Параметар `time_shift` подржава вишестепене временске операције и може да садржи `/<time_unit>` за померање на почетак временске јединице
(`/d` - поноћ, `/w` - 1. дан у недељи (понедељак), `/M` - 1. дан у месецу, итд.).
Примери: `-1w` - тачно 7 дана уназад; `-1w/w` - понедељак претходне недеље; `-1w/w+1d` - уторак претходне недеље.
- Временске операције се рачунају слева надесно без приоритета. На пример, `-1M/d+1h/w` ће бити рашчлањено као `((-1M/d)+1h)/w`.

Примери:

{{TIME}.fmttime(%B)} - вратиће "Октобар" из примљене вредности "12:36:01"
{{TIME}.fmttime(%d %B,-1M/M)} - вратиће "1. септембар" из примљене вредности "12:36:01"

[comment]: # ({/0e2768a5-3caa4dc7})

[comment]: # ({d224cb43-e5cb24ab})
##### htmldecode {#htmldecode}

Декодирање макро вредности из HTML кодирања.

Подржани су следећи знакови:

|Value|Decoded value|
|----|------|
|`&`|`&`|
|`<`|`<`|
|`>`|`>`|
|`"`|`"`|
|`'`|`'`|
|`'`|`'`|

Пример:

  {{ITEM.VALUE}.htmldecode()} - ће HTML-декодирати вредност попут "<" у "<"

[comment]: # ({/d224cb43-e5cb24ab})

[comment]: # ({f78164e5-b0e6d63f})
##### htmlencode {#htmlencode}

Кодирање макро вредности у HTML кодирање.

Подржани су следећи знакови:

|Value|Encoded value|
|----|------|
|`&`|`&`|
|`<`|`<`|
|`>`|`>`|
|`"`|`"`|
|`'`|`'`|

Пример:

{{ITEM.VALUE}.htmlencode()} - ће HTML-кодирати знак попут "<" у "<"

[comment]: # ({/f78164e5-b0e6d63f})

[comment]: # ({edaa6df7-e78b5abd})
##### iregsub(pattern,output) {#iregsub}

Издвајање подстринга помоћу подударања регуларног израза (без разлике између великих и малих слова).

Параметри:

-   **pattern** - регуларни израз који треба подударати;
-   **output** - опције излаза. **\\1 - \\9** резервисани знакови су подржани за групе за снимање. **\\0** враћа подударни текст.

Коментари:

-   Ако нема подударања за регуларни израз, функција не враћа ништа;
-   Ако је образац функције нетачан регуларни израз, макро се евалуира као 'UNKNOWN'
(осим за макрое за откривање ниског нивоа, у ком случају ће функција бити игнорисана, а макро ће остати нерешен);
-   Референце на непостојеће групе за снимање у заменском стрингу се замењују празним стрингом.

Пример:

   {{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - решиће се као "ERROR" ако се приме подстрингови "fail", "error", "fault" или "problem" (не разликује велика и мала слова); ништа ако нема подударања

[comment]: # ({/edaa6df7-e78b5abd})

[comment]: # ({9186768b-b7de9b23})
##### lowercase {#lowercase}

Трансформација свих макро вредности у мала слова. Ради са једнобајтним скуповима знакова (као што је ASCII) и не подржава UTF-8.

Пример:

  {{ITEM.VALUE}.lowercase()} - трансформисаће вредност попут "Zabbix SERVER" у "zabbix server" (мала слова)

[comment]: # ({/9186768b-b7de9b23})

[comment]: # ({2064b2f8-2d4d3410})
##### regrepl(pattern,replacement,<pattern2>,<replacement2>,...) {#regrepl}

Замена карактера/подстринга у макро вредности.

Параметри:

-   **pattern** - регуларни израз који треба да се подудара;
-   **replacement** - стринг за замену. **\\1 - \\9** Чувари места су подржани у стринговима за замену за групе за снимање.

Коментари:

-   Шаблони и замене се обрађују секвенцијално, при чему се сваки следећи пар примењује у складу са исходом претходне замене;
-   Референце на непостојеће групе за снимање у стрингу за замену се замењују празним стрингом.

Примери:

   {{ITEM.VALUE}.regrepl("oldParam", "newParam")} - замениће "oldParam" са "newParam"
   {{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - сви знакови који нису слова биће избегнути обрнутом косом цртом
   {$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - уклониће завршну обрнуту косу црту (на пример, да би се заменило "C:\" са "C:")
   {{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - замениће више делова у вредности ставке

[comment]: # ({/2064b2f8-2d4d3410})

[comment]: # ({825c2e80-a8dcf3b5})
##### regsub(pattern,output) {#regsub}

Издвајање подстринга помоћу подударања регуларног израза (разликује велика и мала слова).

Параметри:

-  **pattern** - регуларни израз који треба подударати;
-  **output** - опције излаза. **\\1 - \\9** резервисани знакови су подржани за групе за снимање. **\\0** враћа подударни текст.

Коментари:

-  Ако нема подударања за регуларни израз, функција не враћа ништа;
-  Ако је образац функције нетачан регуларни израз, макро се евалуира као 'UNKNOWN'
(осим за макрое за откривање ниског нивоа, у ком случају ће функција бити игнорисана, а макро ће остати нерешен);
-  Референце на непостојеће групе за снимање у заменском стрингу се замењују празним стрингом.

Примери:

  {{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - решиће се као "ID проблема: 123" ако се прими вредност попут "123 Линија дневника"
  {{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - решиће се као "ГРЕШКА" ако се приме подстрингови "неуспех", "грешка", "грешка" или "проблем" (разликују се велика и мала слова); ништа ако нема подударања

Погледајте [више примера](#additional-examples).

[comment]: # ({/825c2e80-a8dcf3b5})

[comment]: # ({40e84cc5-d7660986})
##### tr(characters,replacement) {#tr}

Транслитерација знакова макро вредности.

-   **characters** - скуп знакова које треба заменити;
-   **replacement** - скуп позиционо одговарајућих знакова за замену.

Примери:

   {{ITEM.VALUE}.tr(abc, xyz)} - замениће сва појављивања "a" са "x", "b" са "y", "c" са "z"
   {{ITEM.VALUE}.tr(abc, xyzq)} - замениће сва појављивања "a" са "x", "b" са "y", "c" са "z" ("q" се игнорише)
   {{ITEM.VALUE}.tr(abcde, xyz)} - замениће сва појављивања "a" са "x", "b" са "y", "c" са "z", "d" са "z", "e" са "z" (тј. xyzzz)
   {{ITEM.VALUE}.tr("\\\'", "\/\"")} - замениће сва појављивања обрнуте косе црте косом цртама, а једноструке наводнике двоструким наводницима
   {{ITEM.VALUE}.tr(A-Z,a-z)} - конвертоваће сва слова у мала слова
   {{ITEM.VALUE}.tr(0-9a-z,*)} - замениће све бројеве и мала слова са "*"
   {{ITEM.VALUE}.tr(0-9,ab)} - замениће сва појављивања броја 0 са "a", и сва појављивања бројева 1, 2, 3, 4, 5, 6, 7, 8 и 9 са "b"
   {{ITEM.VALUE}.tr(0-9abcA-L,*)} - замениће све бројеве, знакове "abc" и опсег A-L са "*"
   {{ITEM.VALUE}.tr("\n","*")} - замениће појављивања краја реда са *
   {{ITEM.VALUE}.tr("e", "\n")} - замениће сва "e" знаковима краја реда

Да бисте укључили литералне знакове:

   обрнута коса црта - мора се избегавати као \\
   једноструки наводник - мора се избегавати као \'
   двоструки наводник - мора се избегавати као \"

Подржано избегавање Низ са обрнутом косом цртом:

   \\\\ => \\ - двострука обрнута коса црта у једноструку обрнуту косу црту
   \\a => \a - упозорење 
   \\b => \b - брисање уназад
    \\f => \f - померање странице
    \\n => \n - нови ред 
   \\r => \r - враћање
    \\t => \t - хоризонтални табулатор
    \\v => \v - вертикални табулатор

[comment]: # ({/40e84cc5-d7660986})

[comment]: # ({57ab4e3a-8315e479})
##### uppercase {#uppercase}

Трансформација свих макро вредности у велика слова. Ради са једнобајтним скуповима знакова (као што је ASCII) и не подржава UTF-8.

Пример:

  {{ITEM.VALUE}.uppercase()} - трансформисаће вредност попут "Zabbix Server" у "ZABBIX SERVER" (велика слова)

[comment]: # ({/57ab4e3a-8315e479})

[comment]: # ({9f54b4cb-15465392})
##### urldecode {#urldecode}

Декодирање макро вредности из URL кодирања.

Пример:

  {{ITEM.VALUE}.urldecode()} - декодираће URL вредност попут "%2F" у "/"

[comment]: # ({/9f54b4cb-15465392})

[comment]: # ({725aedc6-362f6ccf})
##### urlencode {#urlencode}

Кодирање макро вредности у URL кодирање.

Пример:

  {{ITEM.VALUE}.urlencode()} - ће URL-кодирати знак попут "/" у "%2F"

[comment]: # ({/725aedc6-362f6ccf})

[comment]: # ({e94de17d-148bfc16})
#### Додатни примери

Табела испод приказује више примера коришћења макро функција.

|Macro function|Received value|Output|
|-------------|----|------------|
|`{{ITEM.VALUE}.regsub(^[0-9]+, Проблем)}`|`123Линија евиденције`|`Проблем`|
|`{{ITEM.VALUE}.regsub("^([0-9]+)", "Проблем")}`|`123 Линија евиденције`|`Проблем`|
|`{{ITEM.VALUE}.regsub(".*", "ID проблема: \1")}`|`Линија евиденције`|`ID проблема: `|
|`{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " ID проблема: \1_\2 ")}`|`MySQL се срушио, грешка бр. 123`|` ID проблема: MySQL\_123`|
|`{{ITEM.VALUE}.regsub("([1-9]+", "ID проблема: \1")}`|`123 Линија евиденције`|`НЕПОЗНАТО` (неважећи регуларни израз)|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}`|`customername_1 `|`customername`|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}`|`customername_1 `|`1`|
|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}`|`customername_1 `|`{{#IFALIAS}.regsub("(.*)_([0-9]+", \1)}` (неважећи регуларни израз)|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"}`|`customername_1 `|`{$MACRO:"имекупца"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"}`|`customername_1 `|`{$MACRO:"1"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}`|`customername_1 `|`{$MACRO:"{{#M}.regsub(\"(.*)_([0-9]+\", \1)}"}` (неважећи регуларни израз)|
|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \1)}\"}"`|`customername_1 `|`"{$MACRO:\"имекупца\"}"`|
|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+)\\", \2)}\"}"`|`customername_1 `|`"{$MACRO:\"1\"}"`|
|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"`|`customername_1`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"` (неважећи регуларни израз)|

##### Приказ пуних вредности ставки

Дуге вредности решених макроа {ITEM.VALUE} и {ITEM.LASTVALUE} за текстуалне/лог ставке су скраћене на 20 знакова на неким локацијама у фронтенду.
Да бисте видели пуне вредности ових макроа, можете користити макро функције, нпр.:

   {{ITEM.VALUE}.regsub("(.*)", \1)}
   {{ITEM.LASTVALUE}.regsub("(.*)", \1)}

Погледајте такође: {ITEM.VALUE} и {ITEM.LASTVALUE} [детаљи макроа](/manual/appendix/macros/supported_by_location).

[comment]: # ({/e94de17d-148bfc16})
