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

Résolu/Fermé
vinok972 Messages postés 4 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 4 décembre 2012 - 4 déc. 2012 à 11:25
vinok972 Messages postés 4 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 4 décembre 2012 - 4 déc. 2012 à 12:37
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
4 déc. 2012 à 11:32
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 mardi 4 décembre 2012 Statut Membre Dernière intervention 4 décembre 2012
4 déc. 2012 à 11:51
euh.. normalement non.. pas que je sache :)
0
vinok972 Messages postés 4 Date d'inscription mardi 4 décembre 2012 Statut Membre Dernière intervention 4 décembre 2012
4 déc. 2012 à 11:54
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
4 déc. 2012 à 11:58
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 dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
4 déc. 2012 à 12:28
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 mardi 4 décembre 2012 Statut Membre Dernière intervention 4 décembre 2012
Modifié par vinok972 le 4/12/2012 à 12:37
>> 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