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/04/2022, à 19:01

ziggyS

RESOLU ! - demande d'aide pour la commande "sed"

Salut à tous !

Je veux modifier un fichier sans l'ouvrir  avec la commande " sed -i "(pour un petit script perso)
le code marche pour editer un fichier config.toml, mais pas pour un config.json

Ma ligne d'origine (exemple) dans mon fichier config.json:

 
{
"enable" = true,
"my_name" = "ziggyS",
"my_ip" = "http://0.0.0.0:1234"
}

Je veux modifier l'ip du fichier config.json :  Remplacer le http://0.0.0.0:1234 par  http://127.0.0.1:7890

Ma commande:

sed -i.bak -E 's#^("my_ip"[[:space:]]+=[[:space:]]+).*$#\1"http://127.0.0.1:7890"#' config.json

mais.. ca marche pô  sad

Une idée comment regler le probleme ? ? merci d'avance  ? ? ?

Dernière modification par ziggyS (Le 03/05/2022, à 16:16)

Hors ligne

#2 Le 11/04/2022, à 19:12

Watael

Re : RESOLU ! - demande d'aide pour la commande "sed"

salut,

que dit

file config.json

?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 11/04/2022, à 19:15

pingouinux

Re : RESOLU ! - demande d'aide pour la commande "sed"

Bonsoir,
J'ai testé ta commande sur ton exemple, et ça marche chez moi.

Hors ligne

#4 Le 11/04/2022, à 19:20

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

mes excuses, c'était un : à la place d'un = dans le fichier à modifier...
roll roll roll roll

Probleme résolu

Dernière modification par ziggyS (Le 11/04/2022, à 19:21)

Hors ligne

#5 Le 11/04/2022, à 20:19

Watael

Re : RESOLU ! - demande d'aide pour la commande "sed"

ziggyS a écrit :

Probleme résolu

alors, il faut l'indiquer dans le titre de ton premier message.
merci.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 12/04/2022, à 20:44

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

c'est fait .
merci !

Hors ligne

#7 Le 17/04/2022, à 23:55

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

Re bonjour a tous,
alors après qques essais,
je me rends compte que ma commande ne marche que lorsque tout est collé a la ligne.

Pour rappel, voici la commande en question:

sed -i.bak -E 's#^("my_ip"[[:space:]]+:[[:space:]]+).*$#\1"http://127.0.0.1:7890"#' config.json

donc, dans ce cas ci cela marche parfaitement:

{
"enable" : true,
"my_name" : "ziggyS",
"my_ip" : "http://0.0.0.0:1234"
}

mais cela ne marche pas dans ce cas ci

{
   "enable" : true,
   "my_name" : "ziggyS",
   "my_ip" : "http://0.0.0.0:1234"
}

comment puis-je faire pour que ma commande s'adapte d'elle-même selon les espaces précédents "my_ip" ?

merci d'avance !

Dernière modification par ziggyS (Le 17/04/2022, à 23:58)

Hors ligne

#8 Le 18/04/2022, à 00:03

jplemoine

Re : RESOLU ! - demande d'aide pour la commande "sed"

Sans tester (j'ai la flemme), je dirais qu'il faut enlever le ^. (de mémoire, ^ = début de ligne)

sed -i.bak -E 's#("my_ip"[[:space:]]+=[[:space:]]+).*$#\1"http://127.0.0.1:7890"#' config.json

Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Déconnecté jusqu’à nouvel ordre

Hors ligne

#9 Le 18/04/2022, à 00:20

Watael

Re : RESOLU ! - demande d'aide pour la commande "sed"

c'est, entre autres, pour ça qu'on ne traite pas du JSON, ou le XML, avec le shell.
Il faut lui préférer un programme dédié (jq pour le JSON), ou un langage le faisant nativement ou en chargement un module (python, perl...).

je ne te l'ai pas dit tout de suite, parce que tu semblais avoir la main sur le fichier, et qu'il paraissait de petite taille.

#prévoir qu'il peut y avoir des espaces en début de ligne, ou pas
sed -i.bak -E 's#^\s*("my_i...

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 18/04/2022, à 00:30

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

jplemoine a écrit :

Sans tester (j'ai la flemme), je dirais qu'il faut enlever le ^. (de mémoire, ^ = début de ligne)

sed -i.bak -E 's#("my_ip"[[:space:]]+=[[:space:]]+).*$#\1"http://127.0.0.1:7890"#' config.json

bien vu ! merci !

Hors ligne

#11 Le 18/04/2022, à 00:32

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

Watael a écrit :

c'est, entre autres, pour ça qu'on ne traite pas du JSON, ou le XML, avec le shell.
Il faut lui préférer un programme dédié (jq pour le JSON), ou un langage le faisant nativement ou en chargement un module (python, perl...).

je ne te l'ai pas dit tout de suite, parce que tu semblais avoir la main sur le fichier, et qu'il paraissait de petite taille.

#prévoir qu'il peut y avoir des espaces en début de ligne, ou pas
sed -i.bak -E 's#^\s*("my_i...

tu as entierement raison.
je n'ai pas les connaissance actuellement pour cela. mais ca viendra !
merci encore a vous
je repasse en resolu smile

Hors ligne

#12 Le 19/04/2022, à 01:32

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

j'ai envie d'affiner un peu plus.
comment pourrais je donner une  $valeur sur ce qui est a modifier ?

si j'ecris dans mon terminal

ip=22.33.44.55

et que je passe 

$ip 

dans ma commande,

sed -i.bak -E 's#("my_ip"[[:space:]]+=[[:space:]]+).*$#\1"$ip"#' config.json

ca ne marche pas.. ca print

$ip

et non pas

22.33.44.55 

big_smile

Dernière modification par ziggyS (Le 19/04/2022, à 01:32)

Hors ligne

#13 Le 19/04/2022, à 03:07

nany

Re : RESOLU ! - demande d'aide pour la commande "sed"

Bonjour,



Il faut alors encadrer l’expression par des double quotes au lieu de single quotes.
Du coup, il faut penser à échapper les double quotes présents dans l’expression.

Ta commande

sed -i.bak -E 's#("my_ip"[[:space:]]+=[[:space:]]+).*$#\1"$ip"#' config.json

devient alors

sed -i.bak -E "s#(\"my_ip\"[[:space:]]+=[[:space:]]+).*$#\1\"$ip\"#" config.json

 

À noter que tu es revenu au symbole « = » au lieu du symbole « : » et que seule l’adresse IP sera imprimée (au lieu de « http://ip:port »).

Dernière modification par nany (Le 19/04/2022, à 03:14)

En ligne

#14 Le 22/04/2022, à 00:40

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

magnifique !
je vais tester des que possible !

Hors ligne

#15 Le 03/05/2022, à 16:15

ziggyS

Re : RESOLU ! - demande d'aide pour la commande "sed"

probleme résolu grâce à votre aide.
merci à tous

Dernière modification par ziggyS (Le 03/05/2022, à 16:16)

Hors ligne