
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
+jq
solució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 sed
procesamiento 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á jq
para buscar recursivamente todos los objetos JSON que tengan una rules
clave. 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