Je dois extraire RJ3fadfiasdUYBxF6z
de:
(?<=authToken\":\")(\w+)
regex avec PCRP fonctionne très bien
{"user":{"id":1325135,"uuid":"134513451","email":"ansdfaha@aol.com","joined_at":"2012-01-01T013:511:124.000Z","username":"testicl","title":"testli","thumb":"https://plex.tv/user/avatar?c=","hasPassword":true,"authToken":"RJ3fadfiasdUYBxF6z","authentication_token":"RJ3fadfiasdUYBxF6z","subscription":{"active":false,"status":"Inactive","plan":null,"features":["adaptive_bitrate","collections","photos-metadata-edition","radio","photos-favorites","federated-auth","Android - PiP","publishing_platform","news","kevin-bacon","client-radio-stations","TREBLE-show-features","web_server_dashboard","conan_redirect_qa","conan_redirect_alpha","conan_redirect_beta","transcoder_cache"]},"roles":{"roles":[]},"entitlements":[],"confirmedAt":"2012-01-01T13:31:31.000Z","forumId":23573,"rememberMe":false}}
Comment puis-je extraire RJ3fadfiasdUYBxF6z
en utilisant soit awk
, sed
, ou grep
sans regard positif? Je n'ai pas de support Perl.
Je fais cela à partir d'un script bash sur un routeur openwrt.
5 Réponses :
Il semble que grep
est un jeu équitable
grep -Po '(?<=authToken\":\")(\w+)' file
Remarque: Cela nécessite une bibliothèque supplémentaire, libpcre
, pour grep .
Cela n'a pas besoin de Perl? C'est le support PCRE dans grep
... (ou utilise-t-il Perl?)
Hmm, je pensais que PCRE était compatible avec Perl? J'ai BusyBox v1.28.4 et grep ne me donne pas l'option de mettre le drapeau -P.
Je vois. Alors peut-être qu'il a besoin de Perl pour cela - je pensais que grep
avait ce support nativement intégré, sans Perl, mais je suppose que non.
Ce ne est pas. Il nécessite un package spécial pour la prise en charge native de PCRE, libpcre
-ash: pcregrep: not found
@stinkybummer Ah, bien sûr, cela a du sens; il ne peut pas dépendre de Perl mais il a besoin d'une bibliothèque. Merci de l'avoir découvert, nous avons appris le bit supplémentaire dont grep
a besoin pour cela :).
J'ai pcregrep dans mon RHEL
@ stack0114106 Il semble qu'ils ne l'ont pas. Je trouve sur un CentOS7: pcre
, pcre2
et pcre-devel
(mais pas le programme pcregrep
particulier, uniquement pcre-config
).
@zdim .. oui c'est là dans notre Enterprise RHEL 6.1
@zdim .. merci d'avoir regardé 55104792, une autre solution à cela? .. la première fois que j'utilise \ B
!!!
Vous pouvez utiliser la commande sed
suivante:
sed 's/.*"authToken":"\([^"]*\)".*/\1/' file
Une solution awk
(testée sous openwrt
):
awk -F: -v RS=, '$1=="\"authToken\""{gsub("\"","",$2);print $2}' file RJ3fadfiasdUYBxF6z
Ou pour une correspondance plus précise, utilisez égal ==
:
awk -F: -v RS=, '$1~/"authToken"/{gsub("\"","",$2);print $2}' file RJ3fadfiasdUYBxF6z
$ 1 == "\" authToken \ ""
est fonctionnellement égal à $ 1 ~ / ^ "authToken" $ /
mais est un peu plus rapide.
Peut-être pourriez-vous installer jq
et l'utiliser?
jq .user.authToken < a.json "RJ3fadfiasdUYBxF6z"
Pour se débarrasser des guillemets, ajoutez l'option -r
. <
n'est pas nécessaire.
Certaines versions de Linux sont livrées avec pcregrep
où vous pouvez utiliser les lookarounds ..
Vérifiez ceci
$ pcregrep --version pcregrep version 7.8 2008-09-05 $
Voici la version dans mon RHEL.
$ pcregrep -o '(?<=authToken\":\")(\w+)' json.test RJ3fadfiasdUYBxF6z $
En fait, nous avons parlé de pcregrep
dans les commentaires et il s'avère que openwrt
n'est pas livré avec, cependant pcregrep
est un bon choix lorsqu'il est pris en charge: )
C'est le format de fichier JSON. Avez-vous un outil qui peut analyser JSON?
Je fais cela à partir d'un script bash sur un routeur openwrt, donc je ne pense pas? Essayer de le garder aussi léger que possible. Je suis un super nouveau.