[comment]: # attributes: notoc

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

[comment]: # ({b219ec06-0458cee0})
# 1 Funkcje makr

#### Omówienie

Funkcje makr umożliwiają dostosowywanie wartości [makr](/manual/config/macros) (na przykład skracanie lub wyodrębnianie określonych podciągów), co ułatwia ich używanie.

Składnia funkcji makra jest następująca:

```default
{macro.func(params)}
```

gdzie

-   **macro** - makro do dostosowania;
-   **func** - funkcja do zastosowania (zobacz [obsługiwane funkcje](#supported-functions));
-   **params** - lista parametrów funkcji rozdzielona przecinkami, która musi być ujęta w **podwójne cudzysłowy**, jeśli:
    -   zaczyna się od spacji lub podwójnego cudzysłowu;
    -   zawiera nawias zamykający lub przecinek.

Na przykład:

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

Funkcje makr są obsługiwane dla:

-   [wbudowanych makr](/manual/appendix/macros/supported_by_location)
-   [makr użytkownika](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [makr wykrywania niskiego poziomu](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [makr wyrażeń](/manual/appendix/macros/supported_by_location#other-macro-types)

Funkcje makr można stosować we wszystkich miejscach obsługujących wymienione makra.
Dotyczy to sytuacji, chyba że wyraźnie zaznaczono, że oczekiwane jest tylko makro (na przykład podczas konfigurowania [makr hosta](/manual/config/hosts/host#configuration) lub [filtrów](/manual/discovery/low_level_discovery#filter) reguły wykrywania niskiego poziomu).

Zobacz także: [znane problemy](/manual/installation/known_issues#macro-functions).

Obsługiwana jest tylko jedna funkcja na jedno makro; łączenie wielu funkcji makr w łańcuch nie jest obsługiwane.

:::noteclassic
Zobacz [przykłady ucieczki znaków](/manual/appendix/escaping) dla przypadków, gdy funkcje makr są używane w innych kontekstach (funkcja, klucz pozycji, inne makro itp.).
:::

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

[comment]: # ({49d5aaf8-f23fb953})
#### Obsługiwane funkcje

Funkcje są wymienione bez dodatkowych informacji.
Kliknij funkcję, aby zobaczyć pełne szczegóły.

|Function|Description|
|--|--------|
|[btoa](#btoa)|Kodowanie wartości makra do formatu Base64.|
|[fmtnum](#fmtnum)|Formatowanie liczby w celu kontrolowania liczby cyfr wyświetlanych po przecinku.|
|[fmttime](#fmttime)|Formatowanie czasu.|
|[htmldecode](#htmldecode)|Dekodowanie wartości makra z kodowania HTML.|
|[htmlencode](#htmlencode)|Kodowanie wartości makra do kodowania HTML.|
|[iregsub](#iregsub)|Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (bez uwzględniania wielkości liter).|
|[lowercase](#lowercase)|Przekształcanie znaków wartości makra na małe litery.|
|[regrepl](#regrepl)|Zastępowanie znaku/podciągu w wartości makra.|
|[regsub](#regsub)|Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (z uwzględnianiem wielkości liter).|
|[tr](#tr)|Transliteracja znaków wartości makra.|
|[uppercase](#uppercase)|Przekształcanie znaków wartości makra na wielkie litery.|
|[urldecode](#urldecode)|Dekodowanie wartości makra z kodowania URL.|
|[urlencode](#urlencode)|Kodowanie wartości makra do kodowania URL.|

[comment]: # ({/49d5aaf8-f23fb953})

[comment]: # ({91058888-c1632a9e})
#### Szczegóły funkcji

Opcjonalne parametry funkcji są oznaczone przez < >.

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

[comment]: # ({d82603b4-26fb165d})
##### btoa {#btoa}

Kodowanie wartości makra do formatu Base64.
Kodowanie Base64 to metoda reprezentowania danych binarnych jako tekstu, przydatna do przechowywania i bezpiecznego przesyłania zawartości binarnej za pośrednictwem protokołów tekstowych.

Przykład:

```default
{{ITEM.VALUE}.btoa()} - zakoduje wartość, taką jak "zabbix", do Base64 jako "emFiYml4"
```

Ta funkcja jest obsługiwana od Zabbix 7.0.4.

[comment]: # ({/d82603b4-26fb165d})

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

Formatowanie liczb umożliwiające kontrolę liczby cyfr wyświetlanych po przecinku.

Parametry:

-   **digits** — liczba cyfr po przecinku.
Prawidłowy zakres: 0-20.
Końcowe zera nie będą dodawane.

Przykłady:

```default
{{ITEM.VALUE}.fmtnum(2)} - zwróci "24.35" dla otrzymanej wartości "24.3483523"
{{ITEM.VALUE}.fmtnum(0)} - zwróci "24" dla otrzymanej wartości "24.3483523"
```

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

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

Formatowanie czasu.<br>
Należy pamiętać, że tej funkcji można używać z makrami, które rozwiązują się do wartości w jednym z następujących formatów czasu:

-   `hh:mm:ss`
-   `yyyy-mm-ddThh:mm:ss[tz]` (standard ISO8601)
-   UNIX timestamp

Parametry:

-   **format** - wymagany ciąg formatu, zgodny z formatowaniem funkcji `strftime`;<br>
-   **time\_shift** (opcjonalny) - przesunięcie czasu zastosowane do czasu przed formatowaniem; powinno zaczynać się od `-<N><time_unit>` lub `+<N><time_unit>`, gdzie:<br>
    -   `N` - liczba jednostek czasu do dodania lub odjęcia;
    -   `time_unit` - h (godzina), d (dzień), w (tydzień), M (miesiąc) lub y (rok).

Uwagi:

-   Parametr `time_shift` obsługuje wieloetapowe operacje na czasie i może zawierać `/<time_unit>` w celu przesunięcia do początku jednostki czasu
    (`/d` - północ, `/w` - pierwszy dzień tygodnia (poniedziałek), `/M` - pierwszy dzień miesiąca itd.).
    Przykłady: `-1w` - dokładnie 7 dni wstecz; `-1w/w` - poniedziałek poprzedniego tygodnia; `-1w/w+1d` - wtorek poprzedniego tygodnia.
-   Operacje na czasie są obliczane od lewej do prawej, bez priorytetów.
Na przykład `-1M/d+1h/w` zostanie zinterpretowane jako `((-1M/d)+1h)/w`.

Przykłady:

```default
{{TIMESTAMP}.fmttime(%B)} - zwróci "October" z otrzymanej wartości "1633098961"
{{TIMESTAMP}.fmttime(%d %B,-1M/M)} - zwróci "1 September" z otrzymanej wartości "1633098961"
```

[comment]: # ({/1bcbff41-3caa4dc7})

[comment]: # ({26e2caaa-6f65f316})
##### htmldecode {#htmldecode}

Dekodowanie wartości makra z kodowania HTML.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Obsługiwane są następujące znaki:

|Value|Decoded value|
|----|------|
|`&amp;`|`&`|
|`&lt;`|`<`|
|`&gt;`|`>`|
|`&quot;`|`"`|
|`&#039;`|`'`|
|`&#39;`|`'`|

Przykład:

```default
{{ITEM.VALUE}.htmldecode()} - spowoduje dekodowanie HTML wartości takiej jak "&lt;" do "<"
```

[comment]: # ({/26e2caaa-6f65f316})

[comment]: # ({f282eb66-c4adc457})
##### htmlencode {#htmlencode}

Kodowanie wartości makra do kodowania HTML.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Obsługiwane są następujące znaki:

|Value|Encoded value|
|----|------|
|`&`|`&amp;`|
|`<`|`&lt;`|
|`>`|`&gt;`|
|`"`|`&quot;`|
|`'`|`&#39;`|

Przykład:

```default
{{ITEM.VALUE}.htmlencode()} - spowoduje zakodowanie HTML znaku takiego jak "<" do "&lt;"
```

[comment]: # ({/f282eb66-c4adc457})

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

Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (bez rozróżniania wielkości liter).

Parametry:

-   **pattern** - wyrażenie regularne do dopasowania;
-   **output** - opcje wyjściowe.
Symbole zastępcze **\\1 - \\9** są obsługiwane dla grup przechwytywania.
**\\0** zwraca dopasowany tekst.

Uwagi:

-   Jeśli nie ma dopasowania dla wyrażenia regularnego, funkcja zwraca pusty ciąg.
-   Jeśli wzorzec funkcji jest niepoprawnym wyrażeniem regularnym, makro jest obliczane jako 'UNKNOWN' (z wyjątkiem makr wykrywania niskiego poziomu, w których przypadku funkcja zostanie zignorowana, a makro pozostanie nierozwiązane).
-   Odwołania do nieistniejących grup przechwytywania w ciągu zastępczym są zastępowane pustym ciągiem.

Przykład:

```default
{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - zostanie rozwinięte do "ERROR", jeśli zostaną odebrane podciągi "fail", "error", "fault" lub "problem" (bez rozróżniania wielkości liter); zwróci pusty ciąg, jeśli nie będzie dopasowania
```

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

[comment]: # ({67e9a7db-9922adb7})
##### lowercase {#lowercase}

Przekształca wszystkie znaki wartości makra na małe litery.
Działa z zestawami znaków jednobajtowych (takimi jak ASCII) i nie obsługuje UTF-8.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

```default
{{ITEM.VALUE}.lowercase()} - przekształci wartość taką jak "Zabbix SERVER" w "zabbix server" (małe litery)
```

[comment]: # ({/67e9a7db-9922adb7})

[comment]: # ({40208dc1-031347c2})
##### regrepl(pattern,replacement,<pattern2>,<replacement2>,...) {#regrepl}

Zastępowanie znaku/podciągu w wartości makra.<br>
Należy pamiętać, że ta funkcja jest obsługiwana wyłącznie przez bibliotekę **libpcre2**.
Jeśli serwer/proxy Zabbix został skompilowany z `libpcre`, ta funkcja zwróci UNKNOWN.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Parametry:

-   **pattern** - wyrażenie regularne do dopasowania;
-   **replacement** - ciąg zastępczy.
W ciągach zastępczych obsługiwane są symbole zastępcze **\\1 - \\9** do przechwytywania grup.

Uwagi:

-   Wzorce i zamiany są przetwarzane sekwencyjnie, a każda kolejna para jest stosowana zgodnie z wynikiem poprzedniej zamiany;
-   Odwołania do nieistniejących grup przechwytywania w ciągu zastępczym są zastępowane pustym ciągiem.

Przykłady:

```default
{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - zastąpi "oldParam" ciągiem "newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - wszystkie znaki inne niż litery zostaną poprzedzone ukośnikiem odwrotnym
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - usunie końcowy ukośnik odwrotny (na przykład, aby zastąpić "C:\" ciągiem "C:")
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - zastąpi wiele fragmentów w wartości pozycji
```

[comment]: # ({/40208dc1-031347c2})

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

Wyodrębnianie podciągu na podstawie dopasowania wyrażenia regularnego (z uwzględnieniem wielkości liter).

Parametry:

-   **pattern** - wyrażenie regularne do dopasowania;
-   **output** - opcje danych wyjściowych.
Symbole zastępcze **\\1 - \\9** są obsługiwane dla grup przechwytywania.
**\\0** zwraca dopasowany tekst.

Uwagi:

-   Jeśli nie ma dopasowania do wyrażenia regularnego, funkcja zwraca pusty ciąg.
-   Jeśli wzorzec funkcji jest niepoprawnym wyrażeniem regularnym, makro przyjmuje wartość 'UNKNOWN' (z wyjątkiem makr wykrywania niskiego poziomu, w których przypadku funkcja zostanie zignorowana, a makro pozostanie nierozwiązane).
-   Odwołania do nieistniejących grup przechwytywania w ciągu zastępczym są zastępowane pustym ciągiem.

Przykłady:

```default
{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - zostanie rozwinięte do "Problem ID: 123", jeśli zostanie odebrana wartość taka jak "123 Log line"
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - zostanie rozwinięte do "ERROR", jeśli zostaną odebrane podciągi "fail", "error", "fault" lub "problem" (z uwzględnieniem wielkości liter); zwróci pusty ciąg, jeśli nie będzie dopasowania
```

Zobacz [więcej przykładów](#additional-examples).

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

[comment]: # ({f0be3d81-e91a391f})
##### tr(characters,replacement) {#tr}

Transliteracja znaków wartości makra.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

-   **characters** - zestaw znaków do zastąpienia;
-   **replacement** - zestaw odpowiadających im pozycyjnie znaków zastępczych.
  
Przykłady:

```default
{{ITEM.VALUE}.tr(abc, xyz)} - zastąpi wszystkie wystąpienia "a" przez "x", "b" przez "y", "c" przez "z"
{{ITEM.VALUE}.tr(abc, xyzq)} - zastąpi wszystkie wystąpienia "a" przez "x", "b" przez "y", "c" przez "z" ("q" jest ignorowane)
{{ITEM.VALUE}.tr(abcde, xyz)} - zastąpi wszystkie wystąpienia "a" przez "x", "b" przez "y", "c" przez "z", "d" przez "z", "e" przez "z" (tj. xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - zastąpi wszystkie wystąpienia ukośnika odwrotnego ukośnikiem ukośnym, a pojedyncze cudzysłowy podwójnymi cudzysłowami
{{ITEM.VALUE}.tr(A-Z,a-z)} - zamieni wszystkie litery na małe
{{ITEM.VALUE}.tr(0-9a-z,*)} - zastąpi wszystkie cyfry i małe litery znakiem "*"
{{ITEM.VALUE}.tr(0-9,ab)} - zastąpi wszystkie wystąpienia 0 znakiem "a" oraz wszystkie wystąpienia 1, 2, 3, 4, 5, 6, 7, 8 i 9 znakiem "b"
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - zastąpi wszystkie cyfry, znaki "abc" oraz zakres A-L znakiem "*"
{{ITEM.VALUE}.tr("\n","*")} - zastąpi wystąpienia końca wiersza znakiem *
{{ITEM.VALUE}.tr("e", "\n")} - zastąpi wszystkie "e" końcem wiersza
```

Aby uwzględnić znaki dosłowne:

```default
ukośnik odwrotny - musi być poprzedzony znakiem \\
pojedynczy cudzysłów - musi być poprzedzony znakiem \'
podwójny cudzysłów - musi być poprzedzony znakiem \"
```

Obsługiwane sekwencje escape z ukośnikiem odwrotnym:

```default
\\\\ => \\ - podwójny ukośnik odwrotny do pojedynczego ukośnika odwrotnego
\\a  => \a - alert
\\b  => \b - backspace
\\f  => \f - form feed
\\n  => \n - nowa linia
\\r  => \r - powrót karetki
\\t  => \t - pozioma tabulacja
\\v  => \v - pionowa tabulacja
```

[comment]: # ({/f0be3d81-e91a391f})

[comment]: # ({ec9dd6cc-d8a53517})
##### wielkie litery {#uppercase}

Przekształca wszystkie znaki wartości makra na wielkie litery.
Działa z zestawami znaków jednobajtowych (takimi jak ASCII) i nie obsługuje UTF-8.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

```default
{{ITEM.VALUE}.uppercase()} - przekształci wartość taką jak "Zabbix Server" w "ZABBIX SERVER" (wielkie litery)
```

[comment]: # ({/ec9dd6cc-d8a53517})

[comment]: # ({98faa99f-4fb82e83})
##### urldecode {#urldecode}

Dekodowanie wartości makra z kodowania URL.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

```default
{{ITEM.VALUE}.urldecode()} - zdekoduje wartość, taką jak "%2F", do "/"
```

[comment]: # ({/98faa99f-4fb82e83})

[comment]: # ({8b7a9c23-8dec62fd})
##### urlencode {#urlencode}

Kodowanie wartości makra do formatu URL encoding.
Ta funkcja jest obsługiwana od Zabbix 7.0.4.

Przykład:

```default
{{ITEM.VALUE}.urlencode()} - zakoduje znak taki jak "/" do "%2F"
```

[comment]: # ({/8b7a9c23-8dec62fd})

[comment]: # ({a95b22c2-b6fdaa9a})
#### Dodatkowe przykłady

Poniższa tabela pokazuje więcej przykładów użycia funkcji makr.

:::noteinfo
`{#IFALIAS}` jest [makrem LLD](/manual/config/macros/lld_macros) i jest definiowane wyłącznie w kontekstach niskopoziomowego wykrywania (reguły wykrywania, prototypy oraz pozycje/wyzwalacze utworzone na ich podstawie).
Użycie go poza LLD spowoduje, że token nie zostanie rozwinięty.
:::

|Funkcja makra|Otrzymana wartość|Wynik|
|-------------|----|-------------|
|`{{ITEM.VALUE}.regsub(^[0-9]+, Problem)}`|`123Log line`|`Problem`|
|`{{ITEM.VALUE}.regsub("^([0-9]+)", "Problem")}`|`123 Log line`|`Problem`|
|`{{ITEM.VALUE}.regsub(".*", "Problem ID: \1")}`|`Log line`|`Problem ID: `|
|`{{ITEM.VALUE}.regsub("^(\w+).*?([0-9]+)", " Problem ID: \1_\2 ")}`|`MySQL crashed errno 123`|` Problem ID: MySQL_123 `|
|`{{ITEM.VALUE}.regsub("([1-9]+", "Problem ID: \1")}`|`123 Log line`|`*UNKNOWN*` (nieprawidłowe wyrażenie regularne)|
|`{{#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)}` (nieprawidłowe wyrażenie regularne)|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \1)}"}`|`customername_1`|`{$MACRO:"customername"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+)\", \2)}"}`|`customername_1`|`{$MACRO:"1"}`|
|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}`|`customername_1`|`{$MACRO:"{{#IFALIAS}.regsub(\"(.*)_([0-9]+\", \1)}"}` (nieprawidłowe wyrażenie regularne)|
|`"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \1)}\"}"`|`customername_1`|`"{$MACRO:"\customername\"}"`|
|`"{$MACRO:"\{{#IFALIAS}.regsub("(.*)_([0-9]+)", \2)}\"}"`|`customername_1`|`"{$MACRO:"\1\"}"`|
|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"`|`customername_1`|`"{$MACRO:\"{{#IFALIAS}.regsub(\\"(.*)_([0-9]+\\", \1)}\"}"` (nieprawidłowe wyrażenie regularne)|

##### Wyświetlanie pełnych wartości pozycji

Długie wartości rozwiniętych makr {ITEM.VALUE} i {ITEM.LASTVALUE} dla pozycji tekstowych/logów są w niektórych miejscach frontend skracane do 20 znaków.
Aby zobaczyć pełne wartości tych makr, możesz użyć funkcji makr, np.:

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

Zobacz także: {ITEM.VALUE} i {ITEM.LASTVALUE} [szczegóły makr](/manual/appendix/macros/supported_by_location).

[comment]: # ({/a95b22c2-b6fdaa9a})
