Cómo extraer datos después de un campo en un archivo

Cómo extraer datos después de un campo en un archivo

Tengo el siguiente texto en un archivo.

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

quiero extraer algo dentro "rules": [] actualmente es

/Common/Tetration_TCP_L4_ipfix
/Common/_sys_https_redirect

La salida debería verse así

Tetration_TCP_L4_ipfix
_sys_https_redirect

pero nuevamente esto puede ser cualquier cosa.

Respuesta1

Si su archivo de entrada contiene JSON no completo pero solo un fragmento interno (aunque estructuralmente válido), puede recuperar las partes "externas" que faltan para obtener una estructura JSON completamente válida.

sed+jqsolución:

jq -r '.rules[] | sub("/Common/"; "")' <(sed '1 s/^/{/; $ s/$/]}/' file)

La salida:

Tetration_TCP_L4_ipfix
_sys_https_redirect

Por supuesto, si en realidad tiene un JSON válido, simplemente omita el sedprocesamiento y use:

jq -r '.rules[] | sub("/Common/"; "")' file

Respuesta2

Si se trata de un archivo JSON bien formado:

$ jq -r '..|select(type=="object" and has("rules")).rules|map(split("/")|.[-1])|.[]' file.json
Tetration_TCP_L4_ipfix
_sys_https_redirect

Esto se utilizará jqpara buscar recursivamente todos los objetos JSON que tengan una rulesclave. Para todos los valores de matriz de esas claves, dividirá el valor /y devolverá el último componente del mismo.

Respuesta3

UsandoAWK:

awk -F '[/"]' '/"rules": /,/],/{if(/"rules": |],/) next; print $(NF-1)}' file.txt

información relacionada