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
Bonjour,

Je reviens vers vous car la commande "sed" m'enerve trop:

j'ai un fichier composé de 8 champs séparés par ":" et contenant les lignes suivantes:

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

sur le champ 8 qui est composé lui meme de 4 champs séparés par "," je veux garder que le 2eme chmp comme ceci:


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

j'ai essayé toutes les possibilité de remplacement mais toutes les formules ne marche pas!! est ce que quelqu'un pourra m'aider svp??

A voir également:

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
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]$

;-))
0
Utilisateur anonyme
15 juil. 2010 à 18:13
bonjour et merci pour la réponse. en fait j'ai essayé de suivre la regle :
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?
0
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 à 18:26
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 :
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.

;-))
0
Utilisateur anonyme
16 juil. 2010 à 13:05
Re,
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!!!
0
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
16 juil. 2010 à 13:10
sed -r 's/(.*:)([^,]*),([^-]*)-(.*)/\1\3/'

;-))
0
Utilisateur anonyme
16 juil. 2010 à 13:20
et quand je fait sa:
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.
0
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
Bonjour
________              ___.   .__                 
\______ \   ____  __ _\_ |__ |  |   ____   ____  
 |    |  \ /  _ \|  |  \ __ \|  |  /  _ \ /    \ 
 |    '   (  <_> )  |  / \_\ \  |_(  <_> )   |  \
/_______  /\____/|____/|___  /____/\____/|___|  /
        \/                 \/                 \/ 

La suite ici :https://forums.commentcamarche.net/forum/affich-18648396-utilisation-de-sed
0