Remplacer chaîne caractere par nombre2
Résolu/Fermé
Utilisateur anonyme
-
baladur13 Messages postés 47801 Date d'inscription Statut Modérateur Dernière intervention -
baladur13 Messages postés 47801 Date d'inscription Statut Modérateur Dernière intervention -
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??
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:
- Remplacer chaîne caractere par nombre2
- Caractère ascii - Guide
- Remplacer disque dur par ssd - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
2 réponses
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]$
;-))
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
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?
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.
;-))
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!!!
;-))
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.