grep et regexp

Le
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #754898

[...]

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.

Olivier Miakinen
Le #754897

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.

Cyrille Lefevre
Le #754890
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.

Publicité
Poster une réponse
Anonyme