Trouver la valeur de la clé de JSON
Je voudrais extraire le "id"
clé de cette unique ligne de JSON.
Je crois que cela peut être accompli avec grep, mais je ne suis pas sûr de la bonne façon.
Si il ya une meilleure façon que de ne pas avoir de dépendances, je serais intéressé.
Voici mon exemple de sortie:
{"data": {"name": "test", "id": "4dCYd4W9i6gHQHvd", "domains": ["www.test.domain.com", "test.domain.com"], "serverid": "bbBdbbHF8PajW221", "ssl": null, "runtime": "php5.6", "sysuserid": "4gm4K3lUerbSPfxz", "datecreated": 1474597357}, "actionid": "WXVAAHQDCSILMYTV"}
- Cela peut vous aider: stackoverflow.com/questions/1955505/...
- essayez
grep -o -P '"id":.*?",' json.file |sed 's/"\|,//g'
, devrait vous aider ..mais il serait mieux si vous allez pour certains json connaissance des outils. - Ne pas le
data:
'contenu de s être enfermé dans[ ]
? - Vous pouvez regarder pour certains de Q&A : stackoverflow.com/questions/1955505/..., stackoverflow.com/questions/20488315/..., unix.stackexchange.com/questions/121718/...
Vous devez vous connecter pour publier un commentaire.
Si vous avez un grep qui peut faire du Perl compatible regular expressions (PCRE):
-P
permet PCRE-o
conserve rien, mais le match"id": *
correspond"id"
et une quantité arbitraire d'espaces\K
jette tout à sa gauche ("taille variable regard positif-derrière")"[^"]*"
correspond à deux citations, et tous les non-citations entre euxSi votre grep peut pas le faire, vous utilisez
Il utilise grep deux fois. Le résultat de la première commande est
"id": "4dCYd4W9i6gHQHvd"
; la deuxième commande supprime tout, mais une paire de guillemets et de la non-citations entre eux, ancré à la fin de la chaîne ($
).Mais, comme l'a fait remarquer, vous ne devriez pas utiliser grep pour cela, mais un outil capable d'analyser le JSON par exemple jq:
C'est juste un simple filtre pour le
id
clé dans ladata
objet. Pour se débarrasser des guillemets, vous pouvez utiliser le-r
("brute") option:jq peut également parfaitement jolie imprimer votre JSON:
grep -o '"id": *"[^"]*"' test.txt | grep -o '"[^"]*"$'
Comment puis-je supprimer les guillemets, en laissant seulement la carte d'identité?grep -o '"id": *"[^"]*' test.txt | grep -o '[^"]*$'
Tout tuyau de vos données à
jq
et sélectionner par les touches deTutoriel Ici