56 votes

Groupe, capturant

J'ai la chaîne suivante :

 {"_id":"scheme_version","_rev":"4-cad1842a7646b4497066e09c3788e724","scheme_version":1234}

et j'ai besoin d'obtenir la valeur de "version du schéma", qui est 1234 dans cet exemple.

j'ai essayé

 grep -Eo "\"scheme_version\":(\w*)"

pourtant ça revient

 "scheme_version":1234

Comment puis-je le faire? Je sais que je peux ajouter un appel sed , mais je préférerais le faire avec un seul grep.

68voto

SiegeX Points 32614

Vous devrez utiliser une assertion de regard derrière pour qu'elle ne soit pas incluse dans la correspondance :

grep -Po '(?<=scheme_version":)[0-9]+'

57voto

potong Points 18653

Cela pourrait fonctionner pour vous:

 echo '{"_id":"scheme_version","_rev":"4-cad1842a7646b4497066e09c3788e724","scheme_version":1234}' |
sed -n 's/.*"scheme_version":\([^}]*\)}/\1/p'
1234

Désolé, ce n'est pas grep , alors ignorez cette solution si vous le souhaitez.

Ou restez avec grep et ajoutez:

 grep -Eo "\"scheme_version\":(\w*)"| cut -d: -f2

47voto

Marc O'Morain Points 1257

Je vous recommanderais d'utiliser jq pour le travail. jq est un processeur JSON en ligne de commande.

 $ cat tmp
{"_id":"scheme_version","_rev":"4-cad1842a7646b4497066e09c3788e724","scheme_version":1234}

$ cat tmp | jq .scheme_version
1234

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X