Sed remplacer un array php

Résolu
enyrix Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33746 Date d'inscription   Statut Modérateur Dernière intervention   -
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 33746 Date d'inscription   Statut Modérateur Dernière intervention   7 871
 
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