Como extrair dados após um campo em um arquivo

Como extrair dados após um campo em um arquivo

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+jqsoluçã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 sedprocessamento 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 jqpara encontrar recursivamente todos os objetos JSON que possuem uma ruleschave. 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

informação relacionada