Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 hmm  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

kamaris a écrit :

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

pingouinux a écrit :

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

Foxhawnd #8 a écrit :

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