Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

grep et regexp

3 réponses
Avatar
Mihamina Rakotomandimby (R12y)
Bonjour,

Soit ceci:
$ grep case utilisateurs.php3
utilisateurs.php3:case $id = "userlist" :
utilisateurs.php3:case $id = "form01" :
utilisateurs.php3:case $id = "addconfirm" :
utilisateurs.php3:case $id = "formmodif" :
utilisateurs.php3:case $id = "modifconfirm" :
utilisateurs.php3:case $id = "delconfirm" :
utilisateurs.php3:case $id = "delvalid" :

Il y a plusieurs fichiers ou je dois remplacer "case $id =" par "case".
Juste avec "grep -E" j'essaie de matcher "case $id =" et je ne m'en sors
pas. Aucune des tentatives listées ci-dessous ne fonctionne (je devrais
trouver au moins qu'il y a l'expression dans "utilisateurs.php3":
(certaines sont abhérantes, mais en essayant ce qui me semble "logique", je
n'obtiens pas de résultat, donc j'essaie un peu tout)

$ grep -rE "case(\ )+\$id" *
$ grep -rE "case( )+\$id" *
$ ...

(Il se peut qu'il y ait plusieurs espaces entre "case" et "$id", etc etc)

Le seul qui fonctionne est
$ grep -rE "case(\ )+.{1}id" *

Mais évidemment, ça ne patche pas exactement ce que je veux.

J'en déduis que je ne sais pas echapper '$'
En même temps, je ne vois pas comment je peux l'échapper autrement que
par '\'.

Sinon, si je trouve comment échaper ce "$", est-ce que ça sera valable pour
sed?

Merci d'avance.

--
"Beaucoup de gens achètent des choses dont ils n'ont pas besoin
avec de l'argent qu'il n'ont pas (crédits & emprunts)
pour impressionner des gens qu'ils n'aiment pas."
Inconnu

3 réponses

Avatar
Olivier Miakinen

[...]

J'en déduis que je ne sais pas echapper '$'
En même temps, je ne vois pas comment je peux l'échapper autrement que
par ''.


Il doit te falloir $. L'essentiel est qu'il reste un pour la
commande grep après interprétation par le shell.

Au passage, ma réponse dans fr.comp.lang.php (non encore approuvée) est
fausse concernant l'expression régulière. Je virais la valeur plutôt que
la variable.

Avatar
Olivier Miakinen

Soit ceci:
$ grep case utilisateurs.php3
utilisateurs.php3:case $id = "userlist" :
utilisateurs.php3:case $id = "form01" :
utilisateurs.php3:case $id = "addconfirm" :
utilisateurs.php3:case $id = "formmodif" :
utilisateurs.php3:case $id = "modifconfirm" :
utilisateurs.php3:case $id = "delconfirm" :
utilisateurs.php3:case $id = "delvalid" :


Un petit complément de réponse. Pour ma part, voici comment je
traiterais le problème.

vi *.php3<Enter>
/case<Enter>
c3Wcase<ESC>
n.n.n.n.nnn.n. (etc.)
:w<Enter>
:n<Enter>
n.n.nn.n. (etc.)


Explications :

vi *.php3<Enter>


Éditer tous les fichiers les uns après les autres.

/case<Enter>


Chercher le premier « case »

c3Wcase<ESC>


Remplacer les trois « mots » (case, variable, égale) par le seul mot
« case ».

n.n.n.n.nnn.n. (etc.)


Chercher l'occurrence suivante (n) et faire le même changement (.) si
c'est vraiment l'un des case à traiter, sinon ne faire que « n » et pas
« . ».

:w<Enter>
:n<Enter>


Quand il t'annonce qu'il a fait le tour de tout le fichier et qu'il
revient à la première occurrence, sauver le fichier (:w) et passer au
suivant (:n)

n.n.nn.n. (etc.)


Et ainsi de suite.

Avatar
Cyrille Lefevre
Soit ceci:
$ grep case utilisateurs.php3
utilisateurs.php3:case $id = "userlist" :
[snip]

Il y a plusieurs fichiers ou je dois remplacer "case $id =" par "case".
Juste avec "grep -E" j'essaie de matcher "case $id =" et je ne m'en sors
pas. Aucune des tentatives listées ci-dessous ne fonctionne (je devrais
trouver au moins qu'il y a l'expression dans "utilisateurs.php3":
(certaines sont abhérantes, mais en essayant ce qui me semble "logique", je
n'obtiens pas de résultat, donc j'essaie un peu tout)


perl -pi.bak -e 's/$id *= *// if /case *$id *= */' fichier...

Regards, Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.