Trilhas
/
jq
jq
/
Programa
/
Strings
St

Strings em jq

6 exercícios

Sobre Strings

Lembre-se de que o jq dá suporte aos mesmos tipos de dados que o JSON. O JSON descreve strings como:

Uma string é uma sequência de zero ou mais caracteres Unicode, entre aspas duplas, usando escapes com barra invertida.

Sequências de escape

Dentro de uma string, use o caractere de barra invertida para inserir caracteres "especiais":

  • \" uma aspa literal,
  • \\ uma barra invertida literal,
  • caracteres de espaço em branco \n, \t, \r, \f, \b
  • caracteres Unicode \uAAAA, em que A é um dígito hexadecimal

Comprimento de uma string

Para descobrir o número de caracteres, use a função length.

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

Para descobrir o número de bytes de fato, use a função utf8bytelength.

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

Substrings

A notação de slice pode ser usada para extrair substrings. A sintaxe é .[i:j]. A substring retornada tem comprimento j - i, retornando caracteres do índice i (inclusive) até o índice j (exclusive). Qualquer um dos índices pode ser negativo e, nesse caso, conta de trás para frente a partir do fim da string. Qualquer um dos índices pode ser omitido e, nesse caso, refere-se ao início ou ao fim da string. Os índices começam em zero.

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

Concatenação

Use + para concatenar strings:

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

Use add quando você tiver um array de strings:

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

Dividir e juntar

A divisão usa a função split/1 ou o operador /:

"Hello beautiful world!" | split(" ")   # => ["Hello", "beautiful", "world!"]
"Hello beautiful world!" / " "          # => ["Hello", "beautiful", "world!"]

O inverso de split/1 é join/1.

Converter uma string em um array de caracteres é algo de que você vai precisar com frequência. Há duas formas de fazer isso:

  1. dividir por uma string vazia

    "Hi friend 😀" / ""   # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
    
  2. explode em um array de pontos de código

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

    implode é o inverso de explode.

Encontrar o índice de uma substring

Use a função index/1; o índice começa em zero.

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

Se a substring não estiver na string, o resultado é null

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

Outras funções úteis são rindex/1 e indices.

Interpolação de strings

Dentro de uma string, a sequência \(expression) insere o resultado dessa expressão na string:

"The current datetime is \(now | strflocaltime("%c"))"   # => "The current datetime is Wed Nov 16 17:06:33 2022"

Conversão de maiúsculas e minúsculas

Use as funções ascii_downcase e ascii_upcase para mudar as maiúsculas e minúsculas de uma string.

Converter uma string em número

Use a função tonumber para criar um número a partir de uma string.

Isso gera um erro se a string não puder ser convertida em número, então talvez seja preciso usar try-catch.

$ 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"

Observe que números JSON não incluem as variações hexadecimais ou octais que algumas linguagens oferecem.

Outras funções

Consulte o manual para mais detalhes sobre estas funções:

  • repetir uma string: *
  • verificar se uma string contém outra: contains/1, inside/1, indices/1, index/1, rindex/1, startswith/1, endswith/1
  • remover espaços das pontas: lsrimstr/1, rtrimstr/1
  • funções de formatação: @text, @json, @html, @uri, @csv, @tsv, @sh, @base64, @base64d

Expressões regulares

O jq tem um suporte amplo a expressões regulares: esse será o assunto de uma lição mais adiante.

Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Strings

A prática está bloqueada

Desbloqueie mais 8 exercícios para praticar Strings