Remplacer chaîne caractere par nombre2
Résolu/Fermé
Utilisateur anonyme
-
15 juil. 2010 à 17:10
baladur13 Messages postés 46886 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 12 novembre 2024 - 22 mars 2011 à 16:29
baladur13 Messages postés 46886 Date d'inscription mercredi 11 avril 2007 Statut Modérateur Dernière intervention 12 novembre 2024 - 22 mars 2011 à 16:29
A voir également:
- Remplacer chaîne caractere par nombre2
- Caractère ascii - Guide
- Remplacer disque dur par ssd - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Remplacer par word - Guide
2 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
15 juil. 2010 à 17:45
15 juil. 2010 à 17:45
Salut,
;-))
[jp@MDK-2010 tmpfs]$ cat siham 01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : daniel loiseau gamme,333436418-37,94310,orly 01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : ede ruy,304914211-20,69200,venissieux 01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 : marcu havouis sonia simone,321149312-43,75011,paris 11 [jp@MDK-2010 tmpfs]$ sed -r 's/(.*:)([^,]*),([^,]*),(.*)/\1\3/' siham 01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 :333436418-37 01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 :304914211-20 01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 :321149312-43 [jp@MDK-2010 tmpfs]$
;-))
baladur13
Messages postés
46886
Date d'inscription
mercredi 11 avril 2007
Statut
Modérateur
Dernière intervention
12 novembre 2024
13 437
22 mars 2011 à 16:29
22 mars 2011 à 16:29
Bonjour
La suite ici :https://forums.commentcamarche.net/forum/affich-18648396-utilisation-de-sed
________ ___. .__ \______ \ ____ __ _\_ |__ | | ____ ____ | | \ / _ \| | \ __ \| | / _ \ / \ | ' ( <_> ) | / \_\ \ |_( <_> ) | \ /_______ /\____/|____/|___ /____/\____/|___| / \/ \/ \/
La suite ici :https://forums.commentcamarche.net/forum/affich-18648396-utilisation-de-sed
15 juil. 2010 à 18:13
sed 's/\(chaine1\) \(chaine2\) \(chaine3\) /\3:\2:/'
et donc moi je remplace chaque chaîne par sa correspondance dans le fichier à traiter exemple ma 2ème chaîne dans mon fichier est un nombre de 9 chiffres donc j'ecris ([0-9]{9}) ainsi de suite. et pour le remplacement j'ecris /\2/' comme je veux remplacer tout mon champ par la 2eme chaîne de caractere. en gros:
dans votre formule j'ai compris que vous avez ecrit que 3 chaines et vous avez dit "remplace la 1ere par la troisieme [ ou la 3ème par la 1ère :-( ] mais je n'ai pas compris le reste (.*:)([^,]*),([^,]*),(.*)?? est ce que vous pouvez m'expliquer svp?
15 juil. 2010 à 18:26
En fait non. Il y a 4 chaines de référence.
(.*:)
Chaine 1. Ici on joue sur la gourmandise des regex en capturant tout jusqu'au dernier ":" (deux points)
([^,]*),
Chaine 2. Ici on capture tout jusqu'à ce qu'on rencontre une virgule, qui n'est donc pas compris dans la capture.
([^,]*),
Chaine 3. Idem que précédemment. C'est d'ailleurs cette chaine qui nous intéresse ;-)
(.*)
Chaine 4. Le reste jusqu'à la fin de la ligne.
Ensuite on ne replace que la chaine \1 et la chaine \3.
En fait avec les chaines 2 et 3 on capture ce qui se trouve entre les virgules.
;-))
16 juil. 2010 à 13:05
normalement j'ai compris , sauf que j'ai essayé autre chose mais sa ne marche pas. j'ai essayé de garder que les chiffres avant le "-" et ignorer ceux d'apres le "-".
01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 :304914211-20
01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 :321149312-432
comme ceci:
01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 :304914211
01 : 6407385 : ville de clamart,92140,clamart : fournitures : ouvert : 28/01/2008 : 92 :321149312
ma formule je l'ai ecrite comme ceci:
siham@megalink:~$ sed -r 's/(.*:)([^,]*),([^,]*),(-.*)?:/\1\3/' 2008.textV5|less
je lui ai dit ignore tout ce qui vient apres le "-" mais sa marche pas .
j'ai essayé avec siham@megalink:~$ sed -r 's/(.*:)([^,]*),([^,]*),(.*)(-.*)?:/\1\3/' 2008.textV5|less mais il m'a supprimé tout les champs et il a gardé que les champs où il ya des nombres!!!
16 juil. 2010 à 13:10
;-))
16 juil. 2010 à 13:20
siham@megalink:~$ sed -r 's/[0-9]{9}(-.*)/\1:/' 2008.textV6|less
il m'affiche le contraire , ce qui vient apres le "-"
: -208
01 : 6471404 : lycee louis thuilliergroupement de c,80098,amiens : fournitures : ouvert : 21/02/2008 : 80 : -16
01 : 6471404 : lycee louis thuilliergroupement de c,80098,amiens : fournitures : ouvert : 21/02/2008 : 80 : -16:
enfin bref, les tuto que j'ai trouvé ne sont pas trop détaillés.
merci pour votre aide.