Emlékezz vissza, hogy a jq ugyanazokat az adattípusokat támogatja, mint a JSON.
A JSON a stringeket így írja le:
A string nulla vagy több Unicode-karakter sorozata, kettős idézőjelek közé zárva, fordított perjeles escape-szekvenciák használatával.
A stringen belül a fordított perjel karakterrel ágyazhatsz be „speciális” karaktereket:
\" egy szó szerinti idézőjel,\\ egy szó szerinti fordított perjel,\n, \t, \r, \f, \b
\uAAAA, ahol A egy hexadecimális számjegyA karakterek számának meghatározásához a length függvényt használd.
$ jq -cn --args '$ARGS.positional[] | length' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
7
A szeletelés jelöléssel részstringeket nyerhetsz ki.
A szintaxis .[i:j].
A visszaadott részstring hossza j - i, és az i indexű karaktertől (beleértve) a j indexű karakterig (kizárva) adja vissza a karaktereket.
Mindkét index lehet negatív, ilyenkor a string végétől számol vissza.
Mindkét index elhagyható, ilyenkor a string elejére vagy végére utal.
Az indexelés nullától kezdődik.
"abcdefghij"[3:6] # => "def"
"abcdefghij"[3:] # => "defghij"
"abcdefghij"[:-2] # => "abcdefgh"
A stringek összefűzéséhez a + operátort használd:
"Hello" + " " + "world!"
# => "Hello world!"
Ha stringek tömbjét kapod, használd az add függvényt:
["Hello", " ", "world!"] | add
# => "Hello world!"
A szétvágáshoz a split/1 függvényt vagy a / operátort használhatod:
"Hello beautiful world!" | split(" ") # => ["Hello", "beautiful", "world!"]
"Hello beautiful world!" / " " # => ["Hello", "beautiful", "world!"]
A split/1 inverze a join/1.
Gyakran szükség van arra, hogy egy stringet karakterek tömbjévé alakítsunk. Erre kétféleképpen van lehetőség:
vágd szét üres stringen
"Hi friend 😀" / "" # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
explode segítségével alakítsd kódpontok tömbjévé
"Hi friend 😀" | explode # => [72,105,32,102,114,105,101,110,100,32,128512]
Az implode az explode inverze.
Az index/1 függvényt használd; az index nullától kezdődik.
"hello" | index("el")' # => 1
Ha a részstring nincs benne a stringben, az eredmény null
"hello" | index("elk") # => null
Egy stringen belül a \(expression) szekvencia beágyazza a kifejezés eredményét a stringbe:
"The current datetime is \(now | strflocaltime("%c"))" # => "The current datetime is Wed Nov 16 17:06:33 2022"
Az ascii_downcase és ascii_upcase függvényeket használd.
A jq széles körű támogatást nyújt a reguláris kifejezésekhez: ez egy későbbi lecke témája lesz.
Ebben a feladatban naplóbejegyzéseket fogsz feldolgozni.
Minden naplósor egy karakterlánc, amelynek formátuma a következő: "[<LEVEL>]: <MESSAGE>".
Háromféle naplószint létezik:
INFOWARNINGERRORHárom részfeladatod van, és mindegyik kap egy naplósort, amellyel valamit tenned kell. Sokféleképpen megoldhatod ezeket a részfeladatokat: válaszd ki a kedvenc technikáidat a fenti példák közül, és lássuk, mire jutsz.
Valósítsd meg a message függvényt, amely visszaadja a naplósor üzenetét:
"[ERROR]: Invalid operation" | message
# => "Invalid operation"
A kezdő és a záró szóközöket el kell távolítani:
"[WARNING]: Disk almost full\r\n" | message
# => "Disk almost full"
Valósítsd meg a log_level függvényt, amely visszaadja a naplósor naplószintjét, méghozzá kisbetűvel:
"[ERROR]: Invalid operation" | log_level
# => "error"
Valósítsd meg a reformat függvényt, amely újraformázza a naplósort: az üzenet kerül előre, utána pedig a naplószint zárójelben:
"[INFO]: Operation completed" | reformat
# => "Operation completed (info)"
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) jq nyelvet 12 fogalom75 feladat segítségével, valódi emberi mentorálással, mindez ingyen.