#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ô
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...
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"
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"
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"
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
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
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)
Hors 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