![Citation](https://forum.developpez.be/images/misc/quote_icon.png)
Envoyé par
N_BaH
Bonjour,
par exemple, ainsi :
1 2 3 4
| sed 's/\([^[]*\[\)\([^]]*\)/\1'\''\2'\''/' <<<'$_POST[toto]
$_REQUEST[tata]
$_SESSION[tutu]
$tab[truc]' |
?
et si c'est bon :
find . -name "*.PHP" -exec sed -i.old 's/\([^[]*\[\)\([^]]*\)/\1'\''\2'\''/' {} \;
Je ne connais pas PHP et je ne peux donc pas savoir si ma remarque est pertinente ou non ![:?](https://www.developpez.net/forums/images/smilies/icon_confused.gif)
La proposition de N_BaH consiste à introduire des simples quotes autour de toute chaîne qui est entre crochets, ie changer toute occurrence de [quelque chose] par ['quelque chose'], quel que soit le contexte.
En particulier, si on a quelque chose comme print('Ceci est une [trace]'), il sera transformé en print('Ceci est une ['trace']')... et je ne sais pas si ça peut arriver et être gênant!
De plus, il manque le 'g' final pour répéter la commande s'il y a plusieurs occurrences dans la même ligne.
Une modification plus ciblée serait:
sed -e "s/\(\$[a-zA-Z_]*\[\)\([a-zA-Z_]*\)\]/\1'\2'\]/g"
qui ajoute des quotes autour d'un mot (formé de lettres et underscores) lorsque celui-ci est entre crochets et précédé d'un mot (formé de lettres et underscores) lui-même précédé du caractère '$'.
Oops! je n'avais pas vu la réponse de vinok972
Partager