Bonjours
je doit remplacer une ligne mais cela ne fonctionne pas
voila mais essais réaliser
1
je connais la cause mais arrive pas a trouver ce que je dois faire … la cause est les ("")
merci
Bonjours
je doit remplacer une ligne mais cela ne fonctionne pas
voila mais essais réaliser
1
je connais la cause mais arrive pas a trouver ce que je dois faire … la cause est les ("")
merci
gaaara (du pays du désert? ) , change ton titre pour remplacer seed par sed, ça peut attirer plus de personnes compétentes sur le sujet
quand je vois « sed » j’accours !
Si tu des guillemets dans ce que tu as à substituer, tu peux tenter les quotes « ’ » pour encadrer la chaîne d’expression régulière. Bon je viens de réaliser que tu as des « " » et des « ’ »… Dans ce cas il faut les backslasher. Il semblerait que tu aies déjà essayé aussi, si j’en crois le code que tu as posté.
Il reste la botte secrète de la jouer en 2 bandes : 2 sed consécutifs pour contourner le soucis (au besoin avec l’option -e pour faire des one-liners).
Peux-tu fournir une ligne typique du fichier /var/www/rutorrent/conf/config.php qui contienne le motif que tu souhaites substituer STP ? Puis la même ligne substituée à ta sauce ? Ça pourrait nous aider à mieux cerner le soucis, et potentiellement à tester un truc dans notre coin avant de te le soumettre.
Merci !
Bon courage !
pas de problème
Original
$pathToExternals = array(
"php" => '', // Something like /usr/bin/$
"curl" => '', // Something like /usr/bin/$
"gzip" => '', // Something like /usr/bin/$
"id" => '', // Something like /usr/bin/$
"stat" => '', // Something like /usr/bin/$
);
ce que j’ai a changer
je doit simplement ajouter le chemin en bash et je vois pas autre chose je suis encore un débutent ^^
voila merci de votre aide
Salut,
Je viens de tester sur un fichier test et cette commande fonctionne
sed -i "s/\"curl\" => '',/\"curl\" => '\/usr\/bin\/curl',/g" test
Pour toi :
Faut faire attention aux espaces car je n’avais pas fait attention mais tu as un double espace entre curl et ton =>
Cordialement,
Une autre solution sur le fichier test, pour illustrer le « fais-le en 2 bandes » :
en gros :
— le premier « -e » s’occupe d’ajouter /usr/bin/curl après « “curl” => » (regex entourée de ‘’ pour traiter les “” sans encombre)
— le second « -e » ajoute des quotes (regex entourée de “” pour traiter les ‘’ sans encombre)
D’un coup c’est moins la fête du backslash.
À noter également les « \s* » : un nombre arbitraire (0 ou plus) d’espaces consécutifs, et « \S* » : un nombre arbitraire (0 ou plus) de non-espaces consécutifs. L’enchainement « =>\s*\S*, » détecte jusqu’à la dernière virgule sans espace du mot qui suit « => » avec ou sans espace entre « => » et ce mot.
En cas de pépin (genre « /usr/bin/curl » est aussi présent à 1+ autre endroit dans le fichier où tu ne veux pas le modifier) :
sed -i -e 's#"curl"\s*=>\s*\S*,#"curl" => __/usr/bin/curl__,#' -e "s#__/usr/bin/curl__,#'/usr/bin/curl',#" test
sed -i -e 's#"curl"\s*=>\s*\S*,#"curl" => <truc_arbitraire>,#' -e "s#<truc_arbitraire>,#'/usr/bin/curl',#" test
en gros : rendre le motif intermédiaire spécifique pour ne substituer que celui-ci à la deuxième bande
Un peu plus perfectionné (trop ?) :
sed -i -e 's#"curl"\(\s*=>\s*\)\S*,#"curl"\1/usr/bin/curl,#' -e "s#/usr/bin/curl#'/usr/bin/curl'#" test
le « \1 » recopie le motif détecté entre parenthèses « (\s*=>\s*) » tel que.
Voilà un condensé de ma façon de penser, ensuite en fonction du contexte l’implémentation peut varier. Privilégier une implémentation lisible mais peu élégante est souvent souhaitable pour que quelqu’un ne te maudisse pas dans quelques années À noter que les critères de lisibilité sont très subjectifs.
sed -i "s#\"curl\" => '',#\"curl\" => '/usr/bin/curl'#" machin