[comment]: # attributes: notoc

[comment]: # translation:outdated

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

#### Übersicht

Makrofunktionen bieten die Möglichkeit, Werte von [Makros](/manual/config/macros) anzupassen (zum Beispiel bestimmte Teilzeichenfolgen zu kürzen oder zu extrahieren), sodass sie sich leichter verwenden lassen.

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)
-   [Low-level-discovery-Makros](/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 [Filtern](/manual/discovery/low_level_discovery#filter) von Low-level-discovery-Regeln).

Pro Makro wird nur eine einzelne Funktion unterstützt; mehrere verkettete Makrofunktionen werden nicht unterstützt.

:::noteclassic
Bitte beachten Sie die [Escaping-Beispiele](/manual/appendix/escaping) für Fälle, in denen Makrofunktionen in anderen Kontexten verwendet werden (Funktion, Datenpunktschlüssel, anderes Makro usw.).
:::

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

[comment]: # ({f9dac088-b8563887})
#### Unterstützte Funktionen

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

|Funktion|Beschreibung|
|--|--------|
|[btoa](#btoa)|Kodierung des Makrowerts in Base64-Kodierung.|
|[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 einer Teilzeichenfolge anhand einer Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird nicht beachtet).|
|[lowercase](#lowercase)|Umwandlung der Zeichen des Makrowerts in Kleinbuchstaben.|
|[regrepl](#regrepl)|Ersetzung eines Zeichens/einer Teilzeichenfolge im Makrowert.|
|[regsub](#regsub)|Extraktion einer Teilzeichenfolge anhand einer Übereinstimmung mit einem regulären Ausdruck (Groß-/Kleinschreibung wird beachtet).|
|[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]: # ({/f9dac088-b8563887})

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

Optionale Funktionsparameter werden durch < > angegeben.

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

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

Kodierung eines Makrowerts in die Base64-Kodierung.
Die Base64-Kodierung ist eine Methode zur Darstellung von Binärdaten als Text und ist nützlich für die Speicherung sowie die sichere Übertragung binärer Inhalte über textbasierte Protokolle.

Beispiel:

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

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

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

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

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

Parameter:

-   **format** - obligatorische Formatzeichenfolge, kompatibel mit der Formatierung der Funktion `strftime`;
-   **time\_shift** (optional) - die Zeitverschiebung, die vor der Formatierung auf die Zeit angewendet wird; sie sollte mit `-<N><time_unit>` oder `+<N><time_unit>` beginnen, wobei:
    -   `N` - die Anzahl der Zeiteinheiten, die addiert oder subtrahiert werden sollen;
    -   `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 auf 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 ohne Prioritäten von links nach rechts berechnet.
Zum Beispiel wird `-1M/d+1h/w` als `((-1M/d)+1h)/w` geparst.

Beispiele:

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

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

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

Dekodieren eines Makrowerts aus der HTML-Kodierung.

Die folgenden Zeichen werden unterstützt:

|Wert|Dekodierter Wert|
|----|------|
|`&amp;`|`&`|
|`&lt;`|`<`|
|`&gt;`|`>`|
|`&quot;`|`"`|
|`&#039;`|`'`|
|`&#39;`|`'`|

Beispiel:

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

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

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

Kodierung eines Makrowerts in HTML-Kodierung.

Die folgenden Zeichen werden unterstützt:

|Wert|Kodierter Wert|
|----|------|
|`&`|`&amp;`|
|`<`|`&lt;`|
|`>`|`&gt;`|
|`"`|`&quot;`|
|`'`|`&#39;`|

Beispiel:

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

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

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

Umwandlung aller Zeichen eines Makrowerts in Kleinbuchstaben.  
Funktioniert mit Single-Byte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8.

Beispiel:

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

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

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

Ersetzung von Zeichen/Teilzeichenfolgen im Makrowert.

Parameter:

-   **pattern** - der abzugleichende reguläre Ausdruck;
-   **replacement** - die Ersetzungszeichenfolge.
**\\1 - \\9** Platzhalter werden in Ersetzungszeichenfolgen für Erfassungsgruppen unterstützt.

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 (zum Beispiel, um "C:\" durch "C:" zu ersetzen)
{{ITEM.VALUE}.regrepl("_v1\.0", "_v2.0", "\(final\)", "")} - ersetzt mehrere Teile im Datenpunkt-Wert
```

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

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

Transliteration von Makrowert-Zeichen.

-   **characters** - die Menge der zu ersetzenden Zeichen;
-   **replacement** - die Menge der positionsbezogen entsprechenden Ersetzungszeichen.

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 alle Zeilenende-Vorkommen durch *
{{ITEM.VALUE}.tr("e", "\n")} - ersetzt alle "e" durch ein Zeilenende
```

Um literale Zeichen einzuschließen:

```default
backslash - muss als \\ maskiert werden
einfaches Anführungszeichen - muss als \' maskiert werden
doppeltes Anführungszeichen - 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 - Zeilenumbruch
\\r  => \r - Wagenrücklauf
\\t  => \t - horizontaler Tabulator
\\v  => \v - vertikaler Tabulator
```

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

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

Umwandlung aller Zeichen eines Makrowerts in Großbuchstaben.  
Funktioniert mit Einzelbyte-Zeichensätzen (wie ASCII) und unterstützt kein UTF-8.

Beispiel:

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

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

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

Dekodiert einen Makrowert aus der URL-Kodierung.

Beispiel:

```default
{{ITEM.VALUE}.urldecode()} - dekodiert einen Wert wie "%2F" per URL-Dekodierung zu "/"
```

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

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

Kodierung eines Makrowerts in URL-Kodierung.

Beispiel:

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

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

[comment]: # ({a95b22c2-148bfc16})
#### 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 wird nur in Low-Level-Discovery-Kontexten definiert (Discovery-Regeln, Prototypen und die daraus erstellten Datenpunkte/Auslöser). 
Bei Verwendung außerhalb von LLD bleibt das Token unausgewertet.
:::

|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 aufgelöster 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: [Makrodetails](/manual/appendix/macros/supported_by_location) zu {ITEM.VALUE} und {ITEM.LASTVALUE}.

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


