[comment]: # translation:outdated

[comment]: # attributes: notoc

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

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

#### Przegląd

Funkcje makr umożliwiają dostosowanie wartości [makr](/manual/config/macros) (na przykład skrócenie ich lub wyodrębnienie określonych podciągów), dzięki czemu łatwiej się z nimi pracuje.

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 rozdzielonych przecinkami, które muszą być ujęte w **podwójne cudzysłowy**, jeśli:
    -   zaczynają się od spacji lub podwójnego cudzysłowu;
    -   zawierają zamykający nawias 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

-   [Makr wbudowanych](/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 mogą być używane we wszystkich miejscach obsługujących wymienione makra.
Dotyczy to wszystkich przypadków, 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).

Obsługiwana jest pojedyncza funkcja na makro; wiele funkcji makr połączonych w łańcuch nie jest obsługiwanych.

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

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

[comment]: # ({f9dac088-b8563887})
#### 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 rozróżniania 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 rozróżnianiem 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]: # ({/f9dac088-b8563887})

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

Opcjonalne parametry funkcji są oznaczone przez < >.

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

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

Kodowanie wartości makra do kodowania Base64.
Kodowanie Base64 to metoda przedstawiania 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 postaci Base64 "emFiYml4"
```

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

[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]: # ({a8d94ee5-3caa4dc7})
##### fmttime(format,<time\_shift>) {#fmttime}

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

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

Parametry:

-   **format** - obowiązkowy ciąg formatu, zgodny z formatowaniem funkcji `strftime`;
-   **time\_shift** (opcjonalnie) - przesunięcie czasu stosowane do czasu przed formatowaniem; powinno zaczynać się od `-<N><time_unit>` lub `+<N><time_unit>`, gdzie:
    -   `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>` do przesunięcia na początek jednostki czasu
    (`/d` - północ, `/w` - 1. dzień tygodnia (poniedziałek), `/M` - 1. 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" dla otrzymanej wartości "1633098961"
{{TIMESTAMP}.fmttime(%d %B,-1M/M)} - zwróci "1 September" dla otrzymanej wartości "1633098961"
```

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

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

Dekodowanie wartości makra z kodowania HTML.

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

|Wartość|Zdekodowana wartość|
|----|------|
|`&amp;`|`&`|
|`&lt;`|`<`|
|`&gt;`|`>`|
|`&quot;`|`"`|
|`&#039;`|`'`|
|`&#39;`|`'`|

Przykład:

```default
{{ITEM.VALUE}.htmldecode()} - zdekoduje HTML wartość taką jak "&lt;" do "<"
```

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

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

Kodowanie wartości makra do kodowania HTML.

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

|Wartość|Zakodowana wartość|
|----|------|
|`&`|`&amp;`|
|`<`|`&lt;`|
|`>`|`&gt;`|
|`"`|`&quot;`|
|`'`|`&#39;`|

Przykład:

```default
{{ITEM.VALUE}.htmlencode()} - zakoduje znak HTML, taki jak "<", do postaci "&lt;"
```

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

[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]: # ({9186768b-b7de9b23})
##### małe litery {#lowercase}

Przekształcenie wszystkich znaków wartości makra na małe litery.  
Działa z jednobajtowymi zestawami znaków (takimi jak ASCII) i nie obsługuje UTF-8.

Przykład:

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

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

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

Zastępowanie znaku/podciągu w wartości makra.

Parametry:

-   **pattern** - wyrażenie regularne do dopasowania;
-   **replacement** - ciąg zastępujący.
Symbole zastępcze **\\1 - \\9** są obsługiwane w ciągach zastępujących dla grup przechwytywania.

Uwagi:

-   Wzorce i ciągi zastępujące są przetwarzane sekwencyjnie, przy czym każda kolejna para jest stosowana zgodnie z wynikiem poprzedniego zastąpienia;
-   Odwołania do nieistniejących grup przechwytywania w ciągu zastępującym są zastępowane pustym ciągiem.

Przykłady:

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

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

[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]: # ({40e84cc5-d7660986})
##### tr(characters,replacement) {#tr}

Transliteracja znaków wartości makra.

-   **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 prostym, a pojedyncze cudzysłowy podwójnymi cudzysłowami
{{ITEM.VALUE}.tr(A-Z,a-z)} - przekonwertuje 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 przez "a", a wszystkie wystąpienia 1, 2, 3, 4, 5, 6, 7, 8 i 9 przez "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 linii znakiem *
{{ITEM.VALUE}.tr("e", "\n")} - zastąpi wszystkie "e" znakiem końca linii
```

Aby uwzględnić znaki literałowe:

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

Obsługiwane sekwencje ucieczki z ukośnikiem odwrotnym:

```default
\\\\ => \\ - podwójny ukośnik odwrotny na pojedynczy ukośnik odwrotny
\\a  => \a - alert
\\b  => \b - backspace
\\f  => \f - wysunięcie strony
\\n  => \n - nowa linia
\\r  => \r - powrót karetki
\\t  => \t - tabulator poziomy
\\v  => \v - tabulator pionowy
```

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

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

Przekształcenie wszystkich znaków wartości makra na wielkie litery. 
Działa z jednobajtowymi zestawami znaków (takimi jak ASCII) i nie obsługuje UTF-8.

Przykład:

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

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

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

Dekodowanie wartości makra z kodowania URL.

Przykład:

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

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

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

Kodowanie wartości makra do formatu URL encoding.

Przykład:

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

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

[comment]: # ({a95b22c2-148bfc16})
#### 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 zdefiniowane tylko w kontekstach low-level discovery (reguły wykrywania, prototypy oraz pozycje/wyzwalacze utworzone na ich podstawie). 
Użycie go poza LLD spowoduje pozostawienie tokenu bez rozwinięcia.
:::

|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żna użyć funkcji makr, np.:

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

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

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