[comment]: # attributes: notoc

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

#### Überblick

Makrofunktionen bieten die Möglichkeit, [Makro](/manual/config/macros)-Werte anzupassen (zum Beispiel zu kürzen oder bestimmte Teilzeichenfolgen zu extrahieren), wodurch sie einfacher zu verwenden sind.

Die Syntax einer Makrofunktion lautet:

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

wobei

-   **macro** - das anzupassende Makro;
-   **func** - die anzuwendende Funktion (siehe [unterstützte Funktionen](#supported-functions));
-   **params** - eine durch Kommas getrennte Liste von Funktionsparametern, die **in doppelte Anführungszeichen** gesetzt werden müssen, wenn sie:
    -   mit einem Leerzeichen oder doppelten Anführungszeichen beginnen;
    -   schließende Klammern oder ein Komma enthalten.

Zum Beispiel:

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

Makrofunktionen werden unterstützt für:

-   [integrierte Makros](/manual/appendix/macros/supported_by_location)
-   [Benutzermakros](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [Makros der Low-Level-Discovery](/manual/appendix/macros/supported_by_location#other-macro-types)
-   [Ausdrucksmakros](/manual/appendix/macros/supported_by_location#other-macro-types)

Makrofunktionen können an allen Stellen verwendet werden, die die aufgeführten Makros unterstützen.
Dies gilt, sofern nicht ausdrücklich angegeben ist, dass nur ein Makro erwartet wird (zum Beispiel bei der Konfiguration von [Host-Makros](/manual/config/hosts/host#configuration) oder von [Filtern](/manual/discovery/low_level_discovery#filter) für Low-Level-Discovery-Regeln).

Siehe auch: [bekannte Probleme](/manual/installation/known_issues#macro-functions).

Pro Makro wird nur eine Funktion unterstützt; mehrere Makrofunktionen in einer Kette werden nicht unterstützt.

:::noteclassic
Bitte beachten Sie die [Beispiele zum Escaping](/manual/appendix/escaping) für Fälle, in denen Makrofunktionen innerhalb anderer Kontexte verwendet werden (Funktion, item-Schlüssel, anderes Makro usw.).
:::

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

[comment]: # ({49d5aaf8-f23fb953})
#### Unterstützte Funktionen

Die Funktionen werden ohne zusätzliche Informationen aufgelistet.
Klicken Sie auf die Funktion, um die vollständigen Details anzuzeigen.

|Function|Description|
|--|--------|
|[btoa](#btoa)|Kodierung des Makrowerts in das Base64-Format.|
|[fmtnum](#fmtnum)|Zahlenformatierung zur Steuerung der Anzahl der nach dem Dezimalpunkt ausgegebenen Ziffern.|
|[fmttime](#fmttime)|Zeitformatierung.|
|[htmldecode](#htmldecode)|Dekodierung des Makrowerts aus der HTML-Kodierung.|
|[htmlencode](#htmlencode)|Kodierung des Makrowerts in HTML-Kodierung.|
|[iregsub](#iregsub)|Extraktion eines Teilstrings durch einen regulären Ausdrucksvergleich (nicht case-sensitiv).|
|[lowercase](#lowercase)|Umwandlung der Zeichen des Makrowerts in Kleinbuchstaben.|
|[regrepl](#regrepl)|Ersetzung von Zeichen/Teilstrings im Makrowert.|
|[regsub](#regsub)|Extraktion eines Teilstrings durch einen regulären Ausdrucksvergleich (case-sensitiv).|
|[tr](#tr)|Transliteration der Zeichen des Makrowerts.|
|[uppercase](#uppercase)|Umwandlung der Zeichen des Makrowerts in Großbuchstaben.|
|[urldecode](#urldecode)|Dekodierung des Makrowerts aus der URL-Kodierung.|
|[urlencode](#urlencode)|Kodierung des Makrowerts in URL-Kodierung.|

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

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

Optionale Funktionsparameter werden durch < > angegeben.

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

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

Kodiert einen Makrowert in Base64.
Base64-Kodierung ist eine Methode zur Darstellung binärer Daten als Text. Sie ist nützlich für die Speicherung und die sichere Übertragung binärer Inhalte über textbasierte Protokolle.

Beispiel:

```default
{{ITEM.VALUE}.btoa()} - kodiert einen Wert wie "zabbix" in Base64 zu "emFiYml4"
```

Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

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

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

Zahlenformatierung zur Steuerung der Anzahl der nach dem Dezimalpunkt ausgegebenen Stellen.

Parameter:

-   **digits** - die Anzahl der Stellen nach dem Dezimalpunkt.
Gültiger Bereich: 0-20.
Es werden keine nachgestellten Nullen erzeugt.

Beispiele:

```default
{{ITEM.VALUE}.fmtnum(2)} - gibt "24.35" für einen empfangenen Wert von "24.3483523" zurück
{{ITEM.VALUE}.fmtnum(0)} - gibt "24" für einen empfangenen Wert von "24.3483523" zurück
```

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

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

Zeitformatierung.<br>
Beachten Sie, dass diese Funktion mit Makros verwendet werden kann, die einen Wert in einem der folgenden Zeitformate auflösen:

-   `hh:mm:ss`
-   `yyyy-mm-ddThh:mm:ss[tz]` (ISO8601-Standard)
-   UNIX-Zeitstempel

Parameter:

-   **format** - obligatorische Formatzeichenfolge, kompatibel mit der Formatierung der Funktion `strftime`;<br>
-   **time\_shift** (optional) - die Zeitverschiebung, die vor der Formatierung auf die Zeit angewendet wird; sollte mit `-<N><time_unit>` oder `+<N><time_unit>` beginnen, wobei:<br>
    -   `N` - die Anzahl der Zeit-Einheiten, die addiert oder subtrahiert werden;
    -   `time_unit` - h (Stunde), d (Tag), w (Woche), M (Monat) oder y (Jahr).

Kommentare:

-   Der Parameter `time_shift` unterstützt mehrstufige Zeitoperationen und kann `/<time_unit>` enthalten, um an den Anfang der Zeiteinheit zu verschieben
    (`/d` - Mitternacht, `/w` - 1. Tag der Woche (Montag), `/M` - 1. Tag des Monats usw.).
    Beispiele: `-1w` - genau 7 Tage zurück; `-1w/w` - Montag der vorherigen Woche; `-1w/w+1d` - Dienstag der vorherigen Woche.
-   Zeitoperationen werden von links nach rechts ohne Prioritäten berechnet.
Zum Beispiel wird `-1M/d+1h/w` als `((-1M/d)+1h)/w` interpretiert.

Beispiele:

```default
{{TIMESTAMP}.fmttime(%B)} - gibt "October" aus einem empfangenen Wert von "1633098961" zurück
{{TIMESTAMP}.fmttime(%d %B,-1M/M)} - gibt "1 September" aus einem empfangenen Wert von "1633098961" zurück
```

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

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

Dekodiert einen Makrowert aus der HTML-Kodierung.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Die folgenden Zeichen werden unterstützt:

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

Beispiel:

```default
{{ITEM.VALUE}.htmldecode()} - dekodiert einen HTML-kodierten Wert wie "&lt;" in "<"
```

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

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

Kodierung eines Makrowerts in HTML-Encoding.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Die folgenden Zeichen werden unterstützt:

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

Beispiel:

```default
{{ITEM.VALUE}.htmlencode()} - kodiert ein Zeichen wie "<" in "&lt;"
```

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

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

Extraktion von Teilzeichenfolgen durch eine Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird nicht beachtet).

Parameter:

-   **pattern** - der abzugleichende reguläre Ausdruck;
-   **output** - die Ausgabeoptionen.
**\\1 - \\9** Platzhalter werden für Erfassungsgruppen unterstützt.
**\\0** gibt den übereinstimmenden Text zurück.

Kommentare:

-   Wenn es keine Übereinstimmung für den regulären Ausdruck gibt, gibt die Funktion eine leere Zeichenfolge zurück.
-   Wenn das Funktionsmuster ein fehlerhafter regulärer Ausdruck ist, wird das Makro zu 'UNKNOWN' ausgewertet (außer bei Low-Level-Discovery-Makros; in diesem Fall wird die Funktion ignoriert und das Makro bleibt ungelöst).
-   Verweise auf nicht vorhandene Erfassungsgruppen in der Ersetzungszeichenfolge werden durch eine leere Zeichenfolge ersetzt.

Beispiel:

```default
{{ITEM.VALUE}.iregsub("fail|error|fault|problem","ERROR")} - wird zu "ERROR" aufgelöst, wenn die Teilzeichenfolgen "fail", "error", "fault" oder "problem" empfangen werden (Groß-/Kleinschreibung wird nicht beachtet); gibt eine leere Zeichenfolge zurück, wenn es keine Übereinstimmung gibt
```

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

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

Transformation aller Zeichen des Makrowerts in Kleinbuchstaben.
Funktioniert mit Single-Byte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Beispiel:

```default
{{ITEM.VALUE}.lowercase()} - wandelt einen Wert wie "Zabbix SERVER" in "zabbix server" um (Kleinbuchstaben)
```

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

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

Ersetzung von Zeichen/Teilzeichenfolgen im Makrowert.<br>
Beachten Sie, dass diese Funktion nur mit der Bibliothek **libpcre2** unterstützt wird. 
Wenn Zabbix Server/Proxy mit `libpcre` kompiliert wurde, gibt diese Funktion UNKNOWN zurück.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Parameter:

-   **pattern** - der reguläre Ausdruck, der abgeglichen werden soll;
-   **replacement** - die Ersetzungszeichenfolge.
Platzhalter **\\1 - \\9** werden in Ersetzungszeichenfolgen unterstützt, um Gruppen zu erfassen.

Kommentare:

-   Die Muster und Ersetzungen werden sequenziell verarbeitet, wobei jedes nachfolgende Paar entsprechend dem Ergebnis der vorherigen Ersetzung angewendet wird;
-   Verweise auf nicht vorhandene Erfassungsgruppen in der Ersetzungszeichenfolge werden durch eine leere Zeichenfolge ersetzt.

Beispiele:

```default
{{ITEM.VALUE}.regrepl("oldParam", "newParam")} - ersetzt "oldParam" durch "newParam"
{{ITEM.VALUE}.regrepl("([^a-z])","\\\1")} - alle Nicht-Buchstaben-Zeichen werden mit einem Backslash maskiert
{$THRESHOLD:"{{#FSNAME}.regrepl(\"\\$\",\"\")}"} - entfernt einen abschließenden Backslash (z. B. um "C:\" durch "C:" zu ersetzen)
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - ersetzt mehrere Teile im Datenpunktwert
```

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

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

Teilzeichenfolgenextraktion durch eine Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird beachtet).

Parameter:

-   **pattern** - der abzugleichende reguläre Ausdruck;
-   **output** - die Ausgabeoptionen.
**\\1 - \\9** Platzhalter werden für Erfassungsgruppen unterstützt.
**\\0** gibt den übereinstimmenden Text zurück.

Kommentare:

-   Wenn es keine Übereinstimmung für den regulären Ausdruck gibt, gibt die Funktion eine leere Zeichenfolge zurück.
-   Wenn das Funktionsmuster ein fehlerhafter regulärer Ausdruck ist, wird das Makro zu 'UNKNOWN' ausgewertet (außer bei Low-Level-Discovery-Makros; in diesem Fall wird die Funktion ignoriert und das Makro bleibt ungelöst).
-   Verweise auf nicht vorhandene Erfassungsgruppen in der Ersetzungszeichenfolge werden durch eine leere Zeichenfolge ersetzt.

Beispiele:

```default
{{ITEM.VALUE}.regsub("^([0-9]+)", Problem ID: \1)} - wird zu "Problem ID: 123" aufgelöst, wenn ein Wert wie "123 Log line" empfangen wird
{{ITEM.VALUE}.regsub("fail|error|fault|problem","ERROR")} - wird zu "ERROR" aufgelöst, wenn die Teilzeichenfolgen "fail", "error", "fault" oder "problem" empfangen werden (Groß-/Kleinschreibung wird beachtet); gibt eine leere Zeichenfolge zurück, wenn es keine Übereinstimmung gibt
```

Siehe [weitere Beispiele](#additional-examples).

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

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

Transliteration von Makrowert-Zeichen.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

-   **characters** - die Menge der zu ersetzenden Zeichen;
-   **replacement** - die Menge der positionsweise entsprechenden Ersatzzeichen.
  
Beispiele:

```default
{{ITEM.VALUE}.tr(abc, xyz)} - ersetzt alle Vorkommen von "a" durch "x", "b" durch "y", "c" durch "z"
{{ITEM.VALUE}.tr(abc, xyzq)} - ersetzt alle Vorkommen von "a" durch "x", "b" durch "y", "c" durch "z" ("q" wird ignoriert)
{{ITEM.VALUE}.tr(abcde, xyz)} - ersetzt alle Vorkommen von "a" durch "x", "b" durch "y", "c" durch "z", "d" durch "z", "e" durch "z" (d. h. xyzzz)
{{ITEM.VALUE}.tr("\\\'", "\/\"")} - ersetzt alle Vorkommen von Backslash durch Schrägstrich, einfache Anführungszeichen durch doppelte Anführungszeichen
{{ITEM.VALUE}.tr(A-Z,a-z)} - wandelt alle Buchstaben in Kleinbuchstaben um
{{ITEM.VALUE}.tr(0-9a-z,*)} - ersetzt alle Zahlen und Kleinbuchstaben durch "*"
{{ITEM.VALUE}.tr(0-9,ab)} - ersetzt alle Vorkommen von 0 durch "a" und alle Vorkommen von 1, 2, 3, 4, 5, 6, 7, 8 und 9 durch "b"
{{ITEM.VALUE}.tr(0-9abcA-L,*)} - ersetzt alle Zahlen, die Zeichen "abc" und den Bereich A-L durch "*"
{{ITEM.VALUE}.tr("\n","*")} - ersetzt Vorkommen von Zeilenenden durch *
{{ITEM.VALUE}.tr("e", "\n")} - ersetzt alle "e" durch Zeilenende
```

Um literale Zeichen einzuschließen:

```default
backslash - muss als \\\\ maskiert werden
single quote - muss als \\' maskiert werden
double quote - muss als \\\" maskiert werden
```

Unterstützte Escape-Sequenzen mit Backslash:

```default
\\\\ => \\ - doppelter Backslash zu einfachem Backslash
\\a  => \a - Alarm
\\b  => \b - Rückschritt
\\f  => \f - Seitenvorschub
\\n  => \n - neue Zeile
\\r  => \r - Wagenrücklauf
\\t  => \t - horizontaler Tabulator
\\v  => \v - vertikaler Tabulator
```

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

[comment]: # ({ec9dd6cc-d8a53517})
##### Großschreibung {#uppercase}

Transformation aller Zeichen des Makrowerts in Großbuchstaben.
Funktioniert mit Single-Byte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Beispiel:

```default
{{ITEM.VALUE}.uppercase()} - wandelt einen Wert wie "Zabbix Server" in "ZABBIX SERVER" um (Großbuchstaben)
```

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

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

Dekodiert einen Makrowert aus der URL-Kodierung.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Beispiel:

```default
{{ITEM.VALUE}.urldecode()} - wandelt einen Wert wie "%2F" per URL-Decodierung in "/" um
```

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

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

Kodiert einen Makrowert in URL-Encoding.
Diese Funktion wird seit Zabbix 7.0.4 unterstützt.

Beispiel:

```default
{{ITEM.VALUE}.urlencode()} - kodiert ein Zeichen wie "/" in "%2F"
```

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

[comment]: # ({a95b22c2-b6fdaa9a})
#### Zusätzliche Beispiele

Die folgende Tabelle zeigt weitere Beispiele für die Verwendung von Makrofunktionen.

:::noteinfo
`{#IFALIAS}` ist ein [LLD-Makro](/manual/config/macros/lld_macros) und ist nur in Low-Level-Discovery-Kontexten definiert (Discovery-Regeln, Prototypen und die daraus erstellten Datenpunkte/Auslöser).
Wenn es außerhalb von LLD verwendet wird, bleibt das Token nicht erweitert.
:::

|Makrofunktion|Empfangener Wert|Ausgabe|
|-------------|----|-------------|
|`{{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*` (ungültiger regulärer Ausdruck)|
|`{{#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)}` (ungültiger regulärer Ausdruck)|
|`{$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)}"}` (ungültiger regulärer Ausdruck)|
|`"{$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)}\"}"` (ungültiger regulärer Ausdruck)|

##### Vollständige Datenpunktwerte anzeigen

Lange Werte der aufgelösten Makros {ITEM.VALUE} und {ITEM.LASTVALUE} für Text-/Log-Datenpunkte werden an einigen Stellen im Frontend auf 20 Zeichen gekürzt.
Um die vollständigen Werte dieser Makros anzuzeigen, können Sie Makrofunktionen verwenden, z. B.:

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

Siehe auch: {ITEM.VALUE} und {ITEM.LASTVALUE} [Makrodetails](/manual/appendix/macros/supported_by_location).

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


