
Eu tenho o seguinte texto em um arquivo
"rules": [
"/Common/Tetration_TCP_L4_ipfix",
"/Common/_sys_https_redirect"
],
"rulesReference": [
{
"link": "https://localhost/mgmt/tm/ltm/rule/~Common~Tetration_TCP_L4_ipfix?ver=12.0.0"
}
quero extrair qualquer coisa dentro "rules": []
atualmente é
/Common/Tetration_TCP_L4_ipfix
/Common/_sys_https_redirect
A saída deve ser semelhante
Tetration_TCP_L4_ipfix
_sys_https_redirect
mas, novamente, isso pode ser qualquer coisa.
Responder1
Se o seu arquivo de entrada contiver JSON não completo, mas apenas um fragmento interno (embora estruturalmente válido), você poderá recuperar as partes "externas" ausentes para obter uma estrutura JSON completa e válida.
sed
+jq
solução:
jq -r '.rules[] | sub("/Common/"; "")' <(sed '1 s/^/{/; $ s/$/]}/' file)
A saída:
Tetration_TCP_L4_ipfix
_sys_https_redirect
Claro, se na verdade você tiver um JSON válido - basta pular o sed
processamento e usar:
jq -r '.rules[] | sub("/Common/"; "")' file
Responder2
Se este for um arquivo JSON bem formado:
$ jq -r '..|select(type=="object" and has("rules")).rules|map(split("/")|.[-1])|.[]' file.json
Tetration_TCP_L4_ipfix
_sys_https_redirect
Isso será usado jq
para encontrar recursivamente todos os objetos JSON que possuem uma rules
chave. Para todos os valores da matriz dessas chaves, ele dividirá o valor /
e retornará o último componente dele.
Responder3
UsandoAWK:
awk -F '[/"]' '/"rules": /,/],/{if(/"rules": |],/) next; print $(NF-1)}' file.txt