Lembre-se de que o jq dá suporte aos mesmos tipos de dados que o JSON.
O JSON descreve as strings assim:
Uma string é uma cadeia de zero ou mais caracteres Unicode, envolta em aspas duplas, usando escapes com barra invertida.
Dentro de uma string, use o caractere de barra invertida para inserir caracteres "especiais":
\" uma aspa dupla literal,\\ uma barra invertida literal,\n, \t, \r, \f, \b
\uAAAA, em que A é um dígito hexadecimalPara saber o número de caracteres, use a função length.
$ jq -cn --args '$ARGS.positional[] | length' "Hello world!" "❄🌡🤧🤒🏥🕰😀"
12
7
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; nesse caso, ele conta de trás para frente a partir do fim da string.
Qualquer um dos índices pode ser omitido; nesse caso, ele se refere ao início ou ao fim da string.
Os índices começam em zero.
"abcdefghij"[3:6] # => "def"
"abcdefghij"[3:] # => "defghij"
"abcdefghij"[:-2] # => "abcdefgh"
Use + para juntar strings:
"Hello" + " " + "world!"
# => "Hello world!"
Use add quando tiver um array de strings:
["Hello", " ", "world!"] | add
# => "Hello world!"
Para dividir, use 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.
Muitas vezes é preciso converter uma string em um array de caracteres. Há duas formas de fazer isso:
dividir em uma string vazia
"Hi friend 😀" / "" # => ["H","i"," ","f","r","i","e","n","d"," ","😀"]
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.
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
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"
Use as funções ascii_downcase e ascii_upcase.
O jq tem um suporte rico a expressões regulares: esse será o tema de uma lição mais adiante.
Neste exercício, você vai processar entradas de log.
Cada linha de log é uma string formatada da seguinte forma: "[<LEVEL>]: <MESSAGE>".
Há três níveis de log diferentes:
INFOWARNINGERRORVocê tem três tarefas, e cada uma delas vai receber uma linha de log e pedir que você faça algo com ela. Há muitas maneiras de resolver essas tarefas. Escolha suas técnicas favoritas nos exemplos acima e veja o que você consegue fazer.
Implemente a função message para retornar a mensagem de uma linha de log:
"[ERROR]: Invalid operation" | message
# => "Invalid operation"
Qualquer espaço em branco no início ou no final deve ser removido:
"[WARNING]: Disk almost full\r\n" | message
# => "Disk almost full"
Implemente a função log_level para retornar o nível de log de uma linha de log, que deve ser retornado em minúsculas:
"[ERROR]: Invalid operation" | log_level
# => "error"
Implemente a função reformat que reformata a linha de log, colocando a mensagem primeiro e o nível de log depois dela entre parênteses:
"[INFO]: Operation completed" | reformat
# => "Operation completed (info)"
Crie sua conta no Exercism para aprender e dominar jq com 12 conceitos75 exercícios e mentoria humana de verdade, tudo de graça.