Sed remplacer un array php

Résolu
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

  1. Modérateur
    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