Erinnere dich daran, dass jq dieselben Datentypen wie JSON unterstützt.
JSON beschreibt Zeichenketten wie folgt:
Eine Zeichenkette ist eine Folge von null oder mehr Unicode-Zeichen, die in doppelte Anführungszeichen eingeschlossen ist und Backslash-Escapes verwendet.
Innerhalb einer Zeichenkette verwendest du das Backslash-Zeichen, um „spezielle“ Zeichen einzubetten:
\" ein wörtliches Anführungszeichen,\\ ein wörtlicher Backslash,\n, \t, \r, \f, \b
\uAAAA, wobei A eine Hexadezimalziffer istUm die Anzahl der Zeichen zu ermitteln, verwende die Funktion length.
$ jq -cn --args '$ARGS.positional[] | length' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
7
Die Slice-Notation kann verwendet werden, um Teilzeichenketten zu extrahieren.
Die Syntax ist .[i:j].
Die zurückgegebene Teilzeichenkette hat die Länge j - i und liefert Zeichen von Index i (inklusive) bis Index j (exklusiv).
Jeder Index kann negativ sein; in diesem Fall zählt er vom Ende der Zeichenkette rückwärts.
Jeder Index kann weggelassen werden; in diesem Fall bezieht er sich auf den Anfang oder das Ende der Zeichenkette.
Indizes sind nullbasiert.
"abcdefghij"[3:6] # => "def"
"abcdefghij"[3:] # => "defghij"
"abcdefghij"[:-2] # => "abcdefgh"
Verwende +, um Zeichenketten zu verketten:
"Hello" + " " + "world!"
# => "Hello world!"
Verwende add, wenn du ein Array von Zeichenketten hast:
["Hello", " ", "world!"] | add
# => "Hello world!"
Zum Aufteilen verwendest du die Funktion split/1 oder den Operator /:
"Hello beautiful world!" | split(" ") # => ["Hello", "beautiful", "world!"]
"Hello beautiful world!" / " " # => ["Hello", "beautiful", "world!"]
Die Umkehrung von split/1 ist join/1.
Eine Zeichenkette in ein Array von Zeichen umzuwandeln, ist oft nötig. Es gibt zwei Möglichkeiten, dies zu tun:
Aufteilen an einer leeren Zeichenkette
"Hi friend 😀" / "" # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
explode in ein Array von Codepunkten
"Hi friend 😀" | explode # => [72,105,32,102,114,105,101,110,100,32,128512]
implode ist die Umkehrung von explode.
Verwende die Funktion index/1; der Index ist nullbasiert.
"hello" | index("el")' # => 1
Wenn der Teilstring nicht in der Zeichenkette enthalten ist, ist das Ergebnis null
"hello" | index("elk") # => null
Innerhalb einer Zeichenkette bettet die Sequenz \(expression) das Ergebnis dieses Ausdrucks in die Zeichenkette ein:
"The current datetime is \(now | strflocaltime("%c"))" # => "The current datetime is Wed Nov 16 17:06:33 2022"
Verwende die Funktionen ascii_downcase und ascii_upcase.
jq bietet umfangreiche Unterstützung für reguläre Ausdrücke: Dies wird das Thema einer späteren Lektion sein.
In dieser Übung verarbeitest du Logeinträge.
Jede Logzeile ist ein String, der wie folgt formatiert ist: "[<LEVEL>]: <MESSAGE>".
Es gibt drei verschiedene Log-Level:
INFOWARNINGERRORDu hast drei Aufgaben. Jede bekommt eine Logzeile und du sollst etwas damit machen. Es gibt viele Wege, diese Aufgaben zu lösen. Wähle deine Lieblingstechniken aus den Beispielen oben und schau, was dir einfällt.
Implementiere die Funktion message, die die Nachricht einer Logzeile zurückgibt:
"[ERROR]: Invalid operation" | message
# => "Invalid operation"
Führende und nachfolgende Leerzeichen sollen entfernt werden:
"[WARNING]: Disk almost full\r\n" | message
# => "Disk almost full"
Implementiere die Funktion log_level, die das Log-Level einer Logzeile zurückgibt. Das Log-Level soll in Kleinbuchstaben zurückgegeben werden:
"[ERROR]: Invalid operation" | log_level
# => "error"
Implementiere die Funktion reformat, die die Logzeile umformatiert: zuerst die Nachricht, danach das Log-Level in Klammern:
"[INFO]: Operation completed" | reformat
# => "Operation completed (info)"
Melde dich bei Exercism an, um jq mit 12 Konzepte75 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.