Comment faire des remplacements dans des fichiers (sed + regex)

Résolu
vinok972 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
vinok972 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je cherche à remplacer les occurences suivantes:

$_POST[toto]
$_REQUEST[tata]
$_SESSION[tutu]
$tab[truc]


par

$_POST['toto']
$_REQUEST['tata']
$_SESSION['tutu']
$tab['truc']


sur tous les fichiers PHP contenus dans un dossier en ligne de commande.
Je migre de PHP 5.2 à 5.4 et forcément les variables tableaux sans quotes ç ane passe pas... J'ai plus de 30000 variables à corriger et à la main c'est chaud...

La piste que j'ai est d'utiliser une commande du style:

 find . -name "*.php" -print | xargs sed -i.old -r "s/\$_(?:[a-zA-Z])*\[(?:[a-zA-Z])*\]/\$_(?:[a-zA-Z])*\['(?:[a-zA-Z])*'\]/g"


mais ça ne marche pas.
Est ce que quelqu'un peut m'aider ?
Merci.



A voir également:

4 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Salut,

Ne connaissant pas trop le "php", pour ne pas dire pas du tout, j'aimerai savoir si des crochets peuvent se trouver ailleurs dans la syntaxe que dans des variables tableaux ?

Ceci afin de généraliser et d'optimiser la syntaxe avec "sed" ;-)
0
vinok972 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
euh.. normalement non.. pas que je sache :)
0
vinok972 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
on peut avoir $truc["machin"][bidule]["chouette"]
qu'il aurait fallu remplacer par $truc['machin']['bidule']['chouette']...
Là ça aurait été parfait, mais bon je ne veux pas trop vous embêter non plus :D
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Ok, donc voilà 2 syntaxes (la 2nd au cas ou on pourrait avoir des crochets ailleurs) :

$ cat plop 
$_POST[toto]
$_REQUEST[tata]
$_SESSION[tutu]
$tab[truc]

$ sed -r "s/\[([^]]*)\]/\['\1'\]/g" plop 
$_POST['toto']
$_REQUEST['tata']
$_SESSION['tutu']
$tab['truc']

$ sed -r "s/(\\\$_*[[:alpha:]]*\[)([^]]*)\]/\1'\2'\]/g" plop 
$_POST['toto']
$_REQUEST['tata']
$_SESSION['tutu']
$tab['truc']

$


En combinant avec find :

find . -name "*.php" -exec sed -i.old -r "s/\[([^]]*)\]/\['\1'\]/g" {} \;
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Cette syntaxe devrait régler les problèmes de quotes doubles :

sed -r "s/\[\"/\[/g;s/\"\]/\]/g;s/\[([^]]*)/\['\1'/g"
0
vinok972 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
>> PERFECT zipe31 ;)
Bravo !! Merci beaucoup !

A tout hasard, je suis en train de migrer de php5.2 à 5.4. S'il existe quelqu'un qui a bidouillé un script qui regle les problemes de compatibilité dans tous les fichiers php d'une application, je suis preneur !! :)

Merci encore !
0