France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
22 747 membres enregistrés - 1 887 852 posts - 96 564 topics
Index des forums FH  | Index des forums DegroupNews
      Systèmes et Logiciels Alternatifs
           Applications et Logiciels
                Rions peu, rions bien avec les regex et les anti-slashes...
36 connectés(record : 207 le 05 juin 2007 - 05 h 23)

Vous devez vous connecter pour répondre au topic.
Rions peu, rions bien avec les regex et les anti-slashes...

loz
Put something exciting between your legs!

Messages : 7 547
Inscrit le 07/11/01
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 15 h 46 m 22 s
...où l'on apprendra, soulagés, que les regex dans la vraie vie c'est pas si compliqué :

EDIT : les anti-slashes sautent sur le forum, j'ai dû les remplacer par des "|", j'espère que ça reste lisible...

Admettons que nous avons un script qui manipule un nom de fichier (avec son chemin) :
FICHIER="/repertoire/fichier"
Admettons qu'on ait besoin de manipuler ce nom de fichier avec sed, par exemple pour le masquer dans un fichier texte :
TEXTECENSURE="`cat ~moi/source.txt | sed "s/$FICHIER/topsecret/"`"
Argh, ça marche pas.
Ben voui, $FICHIER contient des slashes qui collisionnent ceux de la regex passée à sed.
Qu'à cela ne tienne, il suffit de les échapper avec des antislashes :
FICHIERFORMATTE="`echo "$FICHIER" | sed "s///|//g"`"
Argh ça marche pas, ben voui, il faut échapper ces slashes-là aussi :
FICHIERFORMATTE="`echo "$FICHIER" | sed "s/|//|||//g"`"
Argh, ça marche toujours pas, les deux anti-slashes doivent être interprétés quelque part avant d'être passés à sed, échappez-moi ça :
FICHIERFORMATTE="`echo "$FICHIER" | sed "s/|//|||||//g"`"
Argh, ça marche pas, je suppose qu'ils sont interprétés parce qu'ils sont entre "`", échappons encore :
FICHIERFORMATTE="`echo "$FICHIER" | sed "s/|//|||||||||//g"`"
Yesss, il fallait bien 9 (neuf ) anti-slashes pour en exprimer un. Trivial, non ?

Le plus beau c'est que c'est tiré d'un problème que j'ai rencontré, et qu'après avoir trouvé je me suis rendu compte qu'il y avait un moyen beaucoup plus simple de gérer mon problème :D:


Message édité 1 fois, la dernière par loz le 06 juin 2006 - 16 h 28.

« Vivre simplement, pour que simplement d’autres puissent vivre. » (Gandhi)

seb.c_38


Messages : 1 252
Inscrit le 07/12/05
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 16 h 16 m 04 s
vi Fichier
:s//\/'/g

:wq

non ?


Message édité 1 fois, la dernière par seb.c_38 le 06 juin 2006 - 16 h 17.


loz
Put something exciting between your legs!

Messages : 7 547
Inscrit le 07/11/01
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 16 h 20 m 41 s
Sauf que je suis dans un script, donc hors de question d'utiliser vi.
Et en plus je comprends pas ta commande sous vi (et vi non plus ne comprends pas d'ailleurs).
C'est censé faire quoi ?



« Vivre simplement, pour que simplement d’autres puissent vivre. » (Gandhi)

loz
Put something exciting between your legs!

Messages : 7 547
Inscrit le 07/11/01
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 16 h 24 m 57 s
Argh, je viens de me rendre compte que la publication de mon post avait mangé presque tous les backslashes !



« Vivre simplement, pour que simplement d’autres puissent vivre. » (Gandhi)

gege38
Modérateur
Chief of the
(¯`·.__[T3aM.BouL3T©]__.·´¯)
Potatoe Reloaded

Messages : 14 097
Inscrit le 05/02/03
Ville : Domène
Non connecté
  Posté le 06 juin 2006 - 16 h 28 m 53 s


Le 06 juin 2006 - 16 h 24, loz a écrit :
Argh, je viens de me rendre compte que la publication de mon post avait mangé presque tous les backslashes !


Ben figure toi qu'il faut double-backslasher les backslashes ici aussi :D:
Authentique, j'en veux pour preuve mon topic sur l'install auto d'un Windows :gne:



" Nous plaisons plus souvent dans le commerce de la vie par nos défauts que par nos qualités. "
--La Rochefoucauld


seb.c_38


Messages : 1 252
Inscrit le 07/12/05
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 16 h 49 m 47 s


Le 06 juin 2006 - 16 h 20, loz a écrit :
Sauf que je suis dans un script, donc hors de question d'utiliser vi.
Et en plus je comprends pas ta commande sous vi (et vi non plus ne comprends pas d'ailleurs).
C'est censé faire quoi ?


C'est egalement de la substitution de characteres ....
mais dans vi

Ca ne marche pas car il manque les tags de debut et de fin.

mais pour en revenir au backslash, il faut effectivement les multiplies pour que ca marche.




loz
Put something exciting between your legs!

Messages : 7 547
Inscrit le 07/11/01
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 16 h 59 m 49 s


Le 06 juin 2006 - 16 h 49, seb.c_38 a écrit :
Ca ne marche pas car il manque les tags de debut et de fin.

Tu ne pourrais pas être plus explicite ?



« Vivre simplement, pour que simplement d’autres puissent vivre. » (Gandhi)

seb.c_38


Messages : 1 252
Inscrit le 07/12/05
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 17 h 31 m 14 s
J'ai pas de linux sous les yeux, mais pour faire des substitutions dans vi il faut des balises de depart et de fin:

vi fichier
ma => marque a en debut de fichier
Shift+G => va a la fin
mb => marque b a la fin
:'a,'b s/////g

l'expression ci-dessus va the changer tous les characteres \ par rien
entre les 2 tags 'a et 'b

si tu veux faire sauter les il faut:
:'a,'b s/\\//g

et si tu veux remplacer des / par des il faut:
:'a,'b s////\\/g

C'est clair non ?

Seb.


Message édité 1 fois, la dernière par seb.c_38 le 06 juin 2006 - 17 h 32.


seb.c_38


Messages : 1 252
Inscrit le 07/12/05
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 17 h 33 m 51 s
merde
j'ai edite le fichier et tout a saute !!!

edit: correctio orthographe


Message édité 1 fois, la dernière par seb.c_38 le 06 juin 2006 - 17 h 38.


seb.c_38


Messages : 1 252
Inscrit le 07/12/05
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 17 h 36 m 10 s
changer les // en rien

:'a,'b s/\/\///g

changer les \\ en rien:

:'a,'b s/\\\\//g

et changer les // en \\
:'a,'b s/\/\//\\\\/g

et finallement les // en \\
:'a,'b s/\\\\/\/\//g

C'est clair




seb.c_38


Messages : 1 252
Inscrit le 07/12/05
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 17 h 36 m 48 s
c'est bon, j'y touche plus.... :lol:




loz
Put something exciting between your legs!

Messages : 7 547
Inscrit le 07/11/01
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 17 h 58 m 39 s
Ok je connaissais pas les marqueurs.
Pour info :%s/etc.// substitue sur toutes les lignes...



« Vivre simplement, pour que simplement d’autres puissent vivre. » (Gandhi)

seb.c_38


Messages : 1 252
Inscrit le 07/12/05
Ville : Grenoble
Non connecté
  Posté le 06 juin 2006 - 18 h 12 m 35 s
merci, pour l'info, c'est une commande que j'utilise peu.

La substitution, qd ca arrive, c'est 1 ou 2 lignes, rarement l'integralite du fichier.

Bonne chance avec tes sed :-P

Seb.




Page genérée en 0.4212 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory