#1 Le 11/01/2020, à 19:15
- Foxhawnd
Probléme de variable avec sed
Bonsoir tout le monde j’espère que vous allez bien, je voulais juste vous demander votre aide car lorsque je fais mon sed avec une valeur codé en dur ca fonctionne mais avec une variable qui contient la même valeur ça ne fonctionne plus regarder :
mon sed avec variable
ça m'affiche ça : "code_commune_insee": "06088", "libell_d_acheminement": "nice", "code_postal": "06200", "coordonnees_gps": , en donnant a la variable le chiffre 06200
alors qu'avec ça :
sed sans variable
ça m'affiche nice et c'est ce que je veux
Merci de votre attention et de vos futurs réponses.
Hors ligne
#2 Le 11/01/2020, à 19:25
- Watael
Re : Probléme de variable avec sed
pourquoi devons-nous aller sur un site différent pour consulter les lignes de codes ? !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 11/01/2020, à 19:27
- Foxhawnd
Re : Probléme de variable avec sed
ah désolé je n'ai pas su les afficher autrement comment faire ?
Hors ligne
#4 Le 11/01/2020, à 20:17
- Foxhawnd
Re : Probléme de variable avec sed
je pense avoir trouver comment vous pouvez voir mon code sans passer par un autre site :
sed -n 's/\(.*\): "nice", "code_postal":\(.*\), \(.*\)/\2/gp'
sed -n " s/\(.*\): '"$1"', "code_postal":\(.*\), \(.*\)/\2/gp"
Hors ligne
#5 Le 11/01/2020, à 20:52
- kamaris
Re : Probléme de variable avec sed
Tu peux échapper les guillemets doubles à l'intérieur de guillemets doubles englobant :
sed -n "s/\(.*\): \"$1\", \"code_postal\":\(.*\), \(.*\)/\2/gp"
Ou bien tu peux concaténer des chaines de caractères délimitées par des guillemets simples :
sed -n 's/\(.*\): "'"$1"'", "code_postal":\(.*\), \(.*\)/\2/gp'
Hors ligne
#6 Le 11/01/2020, à 21:04
- pingouinux
Re : Probléme de variable avec sed
Bonsoir,
De plus, tu dois pouvoir simplifier l'expression (mas il aurait fallu voir un exemple) :
sed -n 's/.*: "'"$1"'", "code_postal":\(.*\), .*/\1/p'
Hors ligne
#7 Le 11/01/2020, à 21:29
- Foxhawnd
Re : Probléme de variable avec sed
Tu peux échapper les guillemets doubles à l'intérieur de guillemets doubles englobant :
sed -n "s/\(.*\): \"$1\", \"code_postal\":\(.*\), \(.*\)/\2/gp"
Ou bien tu peux concaténer des chaines de caractères délimitées par des guillemets simples :
sed -n 's/\(.*\): "'"$1"'", "code_postal":\(.*\), \(.*\)/\2/gp'
j'ai essayé les deux mais j'ai tout de même de résultat différent d'ailleurs voila toute ma ligne qui permet d'extraire les mots:
cat TP/Site/datanova.legroupe.laposte.fr.json | tr "{[" "\n\n" | grep $1 | sed "s/\(.*\), "libell_d_acheminement": "\(.*\)", "code_postal": \"$1\", \(.*\)/\2/p" | head -n 1 | tr "[A-Z]" "[a-z]"
cat TP/Site/datanova.legroupe.laposte.fr.json | tr "{[" "\n\n" | grep "06200" | sed 's/\(.*\), "libell_d_acheminement": "\(.*\)", "code_postal": "06200", \(.*\)/\2/p' | head -n 1 | tr "[A-Z]" "[a-z]"
je ne sais vraiment pas pourquoi le premier m'affiche toute la ligne et le deuxieme juste le bout que je veux
Hors ligne
#8 Le 11/01/2020, à 21:32
- Foxhawnd
Re : Probléme de variable avec sed
Bonsoir,
De plus, tu dois pouvoir simplifier l'expression (mas il aurait fallu voir un exemple) :sed -n 's/.*: "'"$1"'", "code_postal":\(.*\), .*/\1/p'
Quel genre d'exemple ? Je peux le fournir si ca peut vous aider à mieux comprendre le soucis
Hors ligne
#9 Le 11/01/2020, à 21:41
- Watael
Re : Probléme de variable avec sed
quelles sont les données ?
quel est le résultat attendu ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 11/01/2020, à 21:48
- Foxhawnd
Re : Probléme de variable avec sed
la donnée est un fichier .json avec des informations sur les villes avec leurs noms et leurs code postal , et le résultat attendu est de "capturer" la ville avec mon sed chose qui marche sans variable quand je code en dur , mais dés que je mets des variables ça ne fonctionne plus et ça me prend juste la première ligne du fichier
Hors ligne
#11 Le 11/01/2020, à 21:51
- pingouinux
Re : Probléme de variable avec sed
Quel genre d'exemple ? Je peux le fournir si ca peut vous aider à mieux comprendre le soucis
Il faudrait voir le contenu de ce fichier
TP/Site/datanova.legroupe.laposte.fr.json
Hors ligne
#12 Le 11/01/2020, à 21:51
- Foxhawnd
Re : Probléme de variable avec sed
voilà les données desquels j'extrais :
{"nhits": 8, "parameters": {"dataset": "laposte_hexasmal", "timezone": "UTC", "q": "nice", "rows": 10, "format": "json", "lang": "fr", "facet": ["nom_de_la_commune", "code_postal"]}, "records": [{"datasetid": "laposte_hexasmal", "recordid": "1960ba4455e3d062de584193af0fcf665d26a73b", "fields": {"code_commune_insee": "06088", "libell_d_acheminement": "NICE", "code_postal": "06200", "coordonnees_gps": [43.7119992661, 7.23826889465], "nom_de_la_commune": "NICE"}, "geometry": {"type": "Point", "coordinates": [7.23826889465, 43.7119992661]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}, {"datasetid": "laposte_hexasmal", "recordid": "aa2bd312d420d955dff5a1606618cfd30fd884e0", "fields": {"code_commune_insee": "06088", "libell_d_acheminement": "NICE", "code_postal": "06000", "coordonnees_gps": [43.7119992661, 7.23826889465], "nom_de_la_commune": "NICE"}, "geometry": {"type": "Point", "coordinates": [7.23826889465, 43.7119992661]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}, {"datasetid": "laposte_hexasmal", "recordid": "ec15adc726fcda4e8e37ada9e14e8f9b19d1f91c", "fields": {"code_commune_insee": "06088", "libell_d_acheminement": "NICE", "code_postal": "06300", "coordonnees_gps": [43.7119992661, 7.23826889465], "nom_de_la_commune": "NICE"}, "geometry": {"type": "Point", "coordinates": [7.23826889465, 43.7119992661]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}, {"datasetid": "laposte_hexasmal", "recordid": "314a9759fea61fb436143671b4d73867c2db3f82", "fields": {"ligne_5": "ST ROMAN DE BELLET", "code_commune_insee": "06088", "libell_d_acheminement": "NICE", "code_postal": "06200", "nom_de_la_commune": "NICE", "coordonnees_gps": [43.7119992661, 7.23826889465]}, "geometry": {"type": "Point", "coordinates": [7.23826889465, 43.7119992661]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}, {"datasetid": "laposte_hexasmal", "recordid": "18ef0b44e717ccb03c0764c4813ee93d935e7453", "fields": {"ligne_5": "ST ISIDORE", "code_commune_insee": "06088", "libell_d_acheminement": "NICE", "code_postal": "06200", "nom_de_la_commune": "NICE", "coordonnees_gps": [43.7119992661, 7.23826889465]}, "geometry": {"type": "Point", "coordinates": [7.23826889465, 43.7119992661]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}, {"datasetid": "laposte_hexasmal", "recordid": "49d65061fb89d5806f9f822f1afb74aba6a18708", "fields": {"code_commune_insee": "06088", "libell_d_acheminement": "NICE", "code_postal": "06100", "coordonnees_gps": [43.7119992661, 7.23826889465], "nom_de_la_commune": "NICE"}, "geometry": {"type": "Point", "coordinates": [7.23826889465, 43.7119992661]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}, {"datasetid": "laposte_hexasmal", "recordid": "aefba7d6c23ddb84575227d92900437b1cf1af7e", "fields": {"code_commune_insee": "21454", "libell_d_acheminement": "NICEY", "code_postal": "21330", "coordonnees_gps": [47.8654500555, 4.29442620527], "nom_de_la_commune": "NICEY"}, "geometry": {"type": "Point", "coordinates": [4.29442620527, 47.8654500555]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}, {"datasetid": "laposte_hexasmal", "recordid": "8b118be5529685d7dd5143006d36851b409873da", "fields": {"code_commune_insee": "55384", "libell_d_acheminement": "NICEY SUR AIRE", "code_postal": "55260", "coordonnees_gps": [48.8922146905, 5.35514008596], "nom_de_la_commune": "NICEY SUR AIRE"}, "geometry": {"type": "Point", "coordinates": [5.35514008596, 48.8922146905]}, "record_timestamp": "2016-05-09T13:17:00+00:00"}], "facet_groups": [{"facets": [{"count": 6, "path": "NICE", "state": "displayed", "name": "NICE"}, {"count": 1, "path": "NICEY", "state": "displayed", "name": "NICEY"}, {"count": 1, "path": "NICEY SUR AIRE", "state": "displayed", "name": "NICEY SUR AIRE"}], "name": "nom_de_la_commune"}, {"facets": [{"count": 3, "path": "06200", "state": "displayed", "name": "06200"}, {"count": 1, "path": "06000", "state": "displayed", "name": "06000"}, {"count": 1, "path": "06100", "state": "displayed", "name": "06100"}, {"count": 1, "path": "06300", "state": "displayed", "name": "06300"}, {"count": 1, "path": "21330", "state": "displayed", "name": "21330"}, {"count": 1, "path": "55260", "state": "displayed", "name": "55260"}], "name": "code_postal"}]}
avec ma ligne de code sans variable ca arrive a attraper nice mais avec les variables ca prends juste la premiere ligne que j'ai eu grace au head et au grep (c'est le contenu du .json)
Dernière modification par Foxhawnd (Le 11/01/2020, à 21:53)
Hors ligne
#13 Le 11/01/2020, à 22:42
- pingouinux
Re : Probléme de variable avec sed
Tu peux essayer :
sed 's/.*, "libell_d_acheminement": "\(.*\)", "code_postal": "'"$1"'", .*/\L\1/p;Q' fichier
Hors ligne
#14 Le 11/01/2020, à 22:43
- Foxhawnd
Re : Probléme de variable avec sed
j'ai réussi à régler mon soucis merci ! Par contre j'ai un nouveau problème avec curl comment on met une variable dans un url ?
https://datanova.legroupe.laposte.fr/api/records/1.0/search/?dataset=laposte_hexasmal&q=$1&lang=fr&rows=10&facet=nom_de_la_commune&facet=code_postal
Hors ligne
#15 Le 12/01/2020, à 00:16
- kamaris
Re : Probléme de variable avec sed
Comme dans toute chaine de caractères, c'est-à-dire à peu près comme tu as fait.
Qu'est-ce qui ne fonctionne pas ?
Avec des guillemets peut-être :
"https://datanova.legroupe.laposte.fr/api/records/1.0/search/?dataset=laposte_hexasmal&q=$1&lang=fr&rows=10&facet=nom_de_la_commune&facet=code_postal"
Dernière modification par kamaris (Le 12/01/2020, à 00:20)
Hors ligne
#16 Le 12/01/2020, à 07:09
- pingouinux
Re : Probléme de variable avec sed
un peu plus simple que #13 :
sed 's/.*, "libell_d_acheminement": "\(.*\)", "code_postal": "'"$1"'", .*/\L\1/' fichier
Ajouté :
Autre solution
grep -Po '.*, "libell_d_acheminement": "\K.*(?=", "code_postal": "'"$1"'", )' fichier | tr "A-Z" "a-z"
Dernière modification par pingouinux (Le 12/01/2020, à 08:17)
Hors ligne