Sed remplacer un array php [Résolu]

Signaler
Messages postés
145
Date d'inscription
vendredi 11 novembre 2011
Statut
Membre
Dernière intervention
7 avril 2021
-
Messages postés
29801
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 mai 2021
-
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.

1 réponse

Messages postés
29801
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 mai 2021
7 089
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