Kurzusok
/
jq
jq
/
Tanterv
/
Stringek
St

Stringek ebben a kurzusban: jq

6 feladat

A(z) Stringek fogalomról

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-karakterból álló sorozat, kettős idézőjelek közé zárva, escape-szekvenciák segítségével.

Escape-szekvenciák

A stringen belül a visszaperjel karakterrel ágyazhatsz be „különleges” karaktereket:

  • \" egy szó szerinti idézőjel,
  • \\ egy szó szerinti visszaperjel,
  • whitespace-karakterek: \n, \t, \r, \f, \b
  • unicode-karakterek: \uAAAA, ahol az A egy hexadecimális számjegy

A string hossza

A karakterek számának meghatározásához használd a length függvényt.

$ jq -cn --args  '$ARGS.positional[] | length' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
7

A tényleges bájtok számának meghatározásához a utf8bytelength függvényt használd.

$ jq -cn --args  '$ARGS.positional[] | utf8bytelength' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
27

Részstringek

A részstringek kinyeréséhez a slice jelölést használhatod. A szintaxis: .[i:j]. A visszaadott részstring hossza j - i, és az i indexű karaktertől (beleértve) a j indexű karakterig (kizárólag) adja vissza a karaktereket. Bármelyik index lehet negatív, ilyenkor a string végétől visszafelé számol. Bármelyik index elhagyható, ilyenkor a string elejére vagy végére utal. Az indexelés nullától indul.

"abcdefghij"[3:6]   # => "def"
"abcdefghij"[3:]    # => "defghij"
"abcdefghij"[:-2]   # => "abcdefgh"

Összefűzés

A stringek összefűzéséhez használd a + operátort:

"Hello" + " " + "world!"
# => "Hello world!"

Ha stringekből álló tömböt kapsz, használd az add függvényt:

["Hello", " ", "world!"] | add
# => "Hello world!"

Felosztás és összefűzés

A felosztá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ét módszer van:

  1. felosztás üres stringre

    "Hi friend 😀" / ""   # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
    
  2. explode egy kódpontokat tartalmazó tömbre

    "Hi friend 😀" | explode   # => [72,105,32,102,114,105,101,110,100,32,128512]
    

    Az implode az explode inverze.

Részstring indexének megkeresése

Használd az index/1 függvényt; az indexelés nullától indul.

"hello" | index("el")'   # => 1

Ha a részstring nincs benne a stringben, az eredmény null.

"hello" | index("elk")   # => null

További hasznos függvények: rindex/1 és indices.

String-interpoláció

A stringen belül a \(expression) sorozat 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"

Kis- és nagybetűk átalakítása

A string kis- és nagybetűinek megváltoztatásához használd az ascii_downcase és az ascii_upcase függvényt.

String átalakítása számmá

A tonumber függvénnyel stringből hozhatsz létre számot.

Ez hibát dob, ha a string nem alakítható számmá, ezért szükség lehet a try-catch szerkezetre.

$ jq -cn --args '$ARGS.positional[] | [., tonumber]' 42 3.14 oops 1e6 0xbeef
["42",42]
["3.14",3.14]
jq: error (at <unknown>): Invalid numeric literal at EOF at line 1, column 4 (while parsing 'oops')

$ echo $?
5

$ jq -cn --args '$ARGS.positional[] | try [., tonumber] catch "not a number"' 42 3.14 oops 1e6 0xbeef
["42",42]
["3.14",3.14]
"not a number"
["1e6",1000000]
"not a number"

Vedd figyelembe, hogy a JSON-számok nem tartalmaznak hexadecimális vagy oktális változatokat, amelyeket néhány nyelv támogat.

Egyéb függvények

A függvények részleteiről a kézikönyvben olvashatsz:

  • string ismétlése: *
  • tartalmazás vizsgálata: contains/1, inside/1, indices/1, index/1, rindex/1, startswith/1, endswith/1
  • levágás: lsrimstr/1, rtrimstr/1
  • formázó függvények: @text, @json, @html, @uri, @csv, @tsv, @sh, @base64, @base64d

Reguláris kifejezések

A jq széles körben támogatja a reguláris kifejezéseket: erről egy későbbi leckében lesz szó.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Stringek fogalmat

A gyakorlás zárolva

Oldj fel még 8 feladatot, hogy gyakorolhasd a(z) Stringek fogalmat