Scripting bash/php quote dans un sed

Fermé
Vinz - 26 avril 2007 à 19:19
 vinz - 27 avril 2007 à 13:05
Bonjour,
J'avais une petite question concernant un sed dans un exec.
J'ai la ligne suivante :

exec("sed -e 's/\$NbrMachines=7/$NbrMachines=$Machines/g' -e 's/\$ii=array(0=>\"x\")/$tab=\'$serial\'/g' /var/www/testlocal.php > $path/local$i.php");


Je n'arrive pas à mettre des simples quote autour de la variable $serial, comment dois-je faire pour "banaliser ces simples quote".
Merci pour votre aide :)
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 avril 2007 à 19:32
Salut,

Normalement il faut entourer l'expression "sed" par des "quotes doubles" et échapper la "quote simple" comme dans l'exemple suivant :
$ echo Bonjour | sed "s/Bonjour/\\'Bonsoir\\'/"
'Bonsoir'
Mais dans ton cas essaie plutôt ça :
$ echo Bonjour | sed 's/Bonjour/'"'Bonsoir'"'/'
'Bonsoir'
;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
26 avril 2007 à 20:41
J'avais omis le fait que ce soit une variable qu'il ne faut pas interpréter...
Donc il faut échapper aussi le "$" :
echo Bonjour | sed 's/Bonjour/'"'\$Bonsoir'"'/'
'$Bonsoir'
;-))
0
Bonsoir,
Merci pour ton aide ;-)
J'ai transformé ma ligne de code:

exec("sed -e 's/\$NbrMachines=7/\$NbrMachines=$Machines/g' -e 's/\$ii=array(0=>\"x\")/\$tab='\"'$serial'\"'/g' /var/www/testlocal.php > $path/local$i.php");


Ce qui est assez bizarre c'est que si j'échappe $serial rien est assigné à ma variable dans ma seconde page, j'obtient:

$tab=' ';


Par contre j'obtiens bien ce que je veux quand je n'échappe pas ma variable mis à part un petit détail:

$tab='a:3:{i:0;s:4:centos;i:1;s:2:xp;i:2;s:6:debian;}';


et je devrai normalement obtenir ceci (les noms d'os entre ""):

$tab='a:3:{i:0;s:4:"centos";i:1;s:2:"xp";i:2;s:6:"debian";}';


c'est assez bizarre que ces doubles quotes disparaissent d'une page à l'autre.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
27 avril 2007 à 08:16
Essaie comme ça alors :
Bonsoir="Aurevoir"
echo $Bonsoir
Aurevoir
echo Bonjour | sed 's/Bonjour/'"\"$Bonsoir\""'/'
"Aurevoir"
;-)
0
Je pense que le problème se situe plus au niveau du code php qu'au niveau du scripting bash. Je vais expliquer le problème un peu plus en détail.

Mon but est de faire passer un tableau d'une page à une autre, pour ce faire j'utilise serialize:
$serial=serialize($stack);

Ce tableau j'aimerai le trouver sous cette forme la dans ma deuxième page:

$tab='a:3:{i:0;s:6:"centos";i:1;s:2:"xp";i:2;s:6:"debian";}';


Mais avec la commande
exec("sed -e 's/\$ii=array(0=>\"x\")/\$tab='\"'$serial'\"'/g' /var/www/testlocal.php > $path/local$i.php");


J'obtiens la variable tab sous cette forme:

$tab='a:3:{i:0;s:6:centos;i:1;s:2:xp;i:2;s:6:debian;}';


Donc lors du passage d'une page à l'autre les doubles quotes entourant le nom des os disparaissent.
Il faut donc que je trouve la raison de la disparition de ces doubles quotes qui ne doivent pas entourer toute la variable mais seulement le nom des os.
Pour mon premier problème (entourer la variable de simples quotes) c'est résolu maintenant :) pour la 2ème partie je pense que je vais me tourner vers le forum php à moins que quelqu'un ait une idée pour cette disparition de doubles quotes.
0