Les Allergies
Alimentaires
Posez votre question Signaler

Scripting bash/php quote dans un sed

Vinz - Dernière réponse le 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 :)
Lire la suite 

Scripting bash/php quote dans un sed »

Suggestions
5 réponses
Réponse
+0
moins plus
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'
;-))
Ajouter un commentaire
Réponse
+0
moins plus
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'
;-))
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
Essaie comme ça alors :
Bonsoir="Aurevoir"
echo $Bonsoir
Aurevoir
echo Bonjour | sed 's/Bonjour/'"\"$Bonsoir\""'/'
"Aurevoir"
;-)
vinz - 27 avril 2007 à 13:05
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.
Ajouter un commentaire
Ce document intitulé « scripting bash/php quote dans un sed » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?