Sed remplacer un array php

Résolu/Fermé
enyrix Messages postés 144 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 - 7 avril 2021 à 20:18
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 12 avril 2021 à 13:25
Bonjour,
j'essaie de remplacer une valeur dans un fichier PHP avec sed en BASH, toutefois je bloque sur le guillemet simple avant et après le reply_mode. La commande doit être précise, car il y a plusieurs autres valeurs PHP dans le fichier.

J'aimerais remplacer :
$config['reply_mode'] = 0;

par
$config['reply_mode'] = 1;


Voici ma commande sed (qui ne fonctionne pas)
's/$config\[.'reply_mode.'\] = 0;/$config\[\'reply_mode\'] = 1;/'


J'ai essayé avec le backslash ou les points, mais ça ne fonctionne pas non plus.
's/$config\[.'reply_mode.'\] = 0;/$config\[.'reply_mode.'] = 1;/'

retourne
$config[.reply_mode.] = 1;


Ceci fonctionne, mais il manque l'ajout de guillemet simple lors de l'ajout :
's/$config\[.'reply_mode.'\] = 0;/$config\[reply_mode] = 1;/'

ce qui donne :
$config[reply_mode] = 1;


Ceci fonctionne avec les doubles guillemets mais pas les simples :
's/$config\[.'reply_mode.'\] = 0;/$config\[\"reply_mode\"] = 1;/'

retourne
$config["reply_mode"] = 1;


Je teste avec ce site pour faciliter le debug :
https://sed.js.org

Je demande donc votre aide pour trouver la solution, merci.
A voir également:

1 réponse

mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
Modifié le 12 avril 2021 à 13:26
Bonjour

Il suffit d'utiliser des guillemets, en veillant bien à échapper les caractères [ ] et $ qui sont des méta-caractères utilisés par
sed
:

echo "\$config['reply_mode'] = 0;" | sed -e "s/\$config\['reply_mode'\] = 0;/\$config\['reply_mode'\] = 1/"


Bonne chance
1