Supprimer des chaines de caractere

Utilisateur anonyme -  
 lami20j -
Bonjour,

je cherche à supprimer les cedex (le mot cedex et son numero) dans des lignes (citées ci-apres) , jai utilisé la fonction sed pour remplacer le cedex par un vide mai il m'efface que le cedex et laisse le numero et l'espace.

pour information, mes lignes contiennent 5 champs séparés par des deux points.

voici mes lignes:

7320892:ville de tours:37926:tours cedex 9:22/12/2008:
7328306:universite de haute alsace:68093:mulhouse cedex:29/12/2008
7294198:ville de la roche-sur-yon:85021:la roche sur yon cedex01:08/12/2008:
7315529:le mans metropole - communaute urbaine:72039:le mans cedex 10:18/12/2008

quand je fais : echo cedex | sed 's/cedex//'|less


voila ce qui me donne :
7320892:ville de tours:37926:tours 9:22/12/2008:
7328306:universite de haute alsace:68093:mulhouse :29/12/2008
7294198:ville de la roche-sur-yon:85021:la roche sur yon 01:08/12/2008:
7315529:le mans metropole - communaute urbaine:72039:le mans 10:18/12/2008

est-ce-qu'il y a une fonction pour dire : efface moi tous les cedex et tout ce qui vient apres cedex (sur le champ n° 4 ou il y a cedex seulement) toute en sachant que mes champs sont separés par des deux points.

merci bien

10 réponses

Utilisateur anonyme
 
re,

c'est bon, je l'ai trouvé.

echo cedex [0-9]*| sed 's/cedex [0-9]*//'|less
0
lami20j
 
Salut,

sed -i.orig 's/ *cedex *[0-9]*//' fichier_cedex


P.S. Avant le 1er et 2ème * il y a un espace
0
Utilisateur anonyme
 
bonjour,
merci pour votre réponse. c'est quoi "orig" ???. avec ma formule il prend en consideration que les lignes où les cedex et les numeros sont separés par un espaces. mais ou c'est attaché (cad ya pas d'espace ex: cedex01) il n'eafface pas le cedex.

je viens d'essayé votre formule mais voila ce qu'il m'affiche:

sed: -e expression #1, char 20: unknown option to `s'

c'est quoi le probleme svp?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Il n'y a pas systématiquement d'espace entre cedex et les chiffres (dans son exemple tout au moins), donc :

sed 's/ *cedex[^:]*//'


Non ?
0
Utilisateur anonyme > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Re,

oui c'est bon, avec sed 's/ *cedex[^:]*//' , ça marche super bien.

avec ma formule, j'ai ajouté une * au debut (echo cedex *[0-9]*| sed 's/cedex *[0-9]*//'|less) et sa marche aussi sauf que s'a laisse les espaces.

mille merci et bonne journée
0
lami20j > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Re,

Il n'y a pas systématiquement d'espace entre cedex et les chiffres
Oui. C'est pour ça que j'ai mis ' *' ;-)

En revanche je suis plutôt d'accord avec [^:]*, bien vu ;-)
0
lami20j
 
Re,

-i.orig permet de sauvegarde le fichier original

Affiche ici ce que tu tapes.

Regarde par exemple dans mon test
$ cat cedex
7320892:ville de tours:37926:tours cedex 9:22/12/2008:
7328306:universite de haute alsace:68093:mulhouse cedex:29/12/2008
7294198:ville de la roche-sur-yon:85021:la roche sur yon cedex01:08/12/2008:
7315529:le mans metropole - communaute urbaine:72039:le mans cedex 10:18/12/2008

$ sed -i.orig 's/ *cedex *[0-9]*//' cedex


Le fichier sans cedex
$ cat cedex
7320892:ville de tours:37926:tours:22/12/2008:
7328306:universite de haute alsace:68093:mulhouse:29/12/2008
7294198:ville de la roche-sur-yon:85021:la roche sur yon:08/12/2008:
7315529:le mans metropole - communaute urbaine:72039:le mans:18/12/2008


Et l'original
$ cat cedex.orig
7320892:ville de tours:37926:tours cedex 9:22/12/2008:
7328306:universite de haute alsace:68093:mulhouse cedex:29/12/2008
7294198:ville de la roche-sur-yon:85021:la roche sur yon cedex01:08/12/2008:
7315529:le mans metropole - communaute urbaine:72039:le mans cedex 10:18/12/2008

$
0
Utilisateur anonyme
 
mais avec cette formule, il m'affiche toujours le message:

sed: -e expression #1, char 20: unknown option to `s'

j'ai essayé avec sed 's/ *cedex[^:]*//' et sa marche.
0
Utilisateur anonyme
 
re,

oui c'est bon, avec sed 's/ *cedex[^:]*//' , ça marche super bien.

avec ma formule, j'ai ajouté une * au debut (echo cedex *[0-9]*| sed 's/cedex *[0-9]*//'|less) et sa marche aussi sauf que s'a laisse les espaces.

mille merci et bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j
 
Re,

sauf que s'a laisse les espaces.

Oui puisque tu as utilisé
sed 's/cedex *[0-9]*//'
au lieu de
sed 's/ *cedex *[0-9]*//'
Tu vois la différence.
0
Utilisateur anonyme
 
oui oui, vous avez raison.

j'emprofite pour poser une autre question alors. ici dans mon exemple il s'agit des chiffres. mais comment faire pour les lettres ??? (est ce que je fais *[a-z]* ????)

exemple:

mindef/dga/dcm
mindef /cca/emm
mindef/dga

je veux remplacer le "mindef" par "ministere de la defense" et supprimer tout ce qui vient apres!! tout en sachant que mes champs sont toujours séparés par des ":" et dans le champ que jai cité plus haut , tout ce qui vient apres mindef est séparé par un slash .

merci
0
lami20j
 
Re,

Oui oui, vous avez raison.
Ce n'est pas ça que je cherche ;-)
Je voulais juste que tu comprennes d'où vennait l'erreur.

Tu veux dire que les lignes ont la forme
7320892:ville de tours:37926:tours:22/12/2008:mindef/dga/dcm 
?
C'est toujours comme ça, avec mindef?
0
Utilisateur anonyme
 
voici un extrait de mes lignes:

6406705:mindef/sga/dcsid/eg bordeaux:33998:bordeaux :28/01/2008:
6403171:mindef/dga/det/etbs technique bourges:18021:bourges:25/01/2008:
6497716:etat/mindef/sga/sid/drg de rennes:49041:angers:28/02/2008:

je veux supprimer ci qui est avant et apres mindef. la 3eme ligne par exemple , il y a le mot "etat" avant mindef.

merci
0
Utilisateur anonyme
 
oui exactement
0
lami20j
 
Re,

Essaie

$ cat cedex
7320892:ville de tours:37926:tours cedex01:22/12/2008:mindef/dga/dcm
7328306:universite de haute alsace:68093:mulhouse cedex:29/12/2008:mindef/cca/emm
7294198:ville de la roche-sur-yon:85021:la roche sur yon cedex01:08/12/2008:mindef/dga
7315529:le mans metropole - communaute urbaine:72039:le mans cedex 10:18/12/2008:mindef

$ sed 's/ *cedex[^:]*//;s/:mindef.*/:ministere de la defense/' cedex
7320892:ville de tours:37926:tours:22/12/2008:ministere de la defense
7328306:universite de haute alsace:68093:mulhouse:29/12/2008:ministere de la defense
7294198:ville de la roche-sur-yon:85021:la roche sur yon:08/12/2008:ministere de la defense
7315529:le mans metropole - communaute urbaine:72039:le mans:18/12/2008:ministere de la defense

$
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
[tmpfs]$ cat plop
6406705:mindef/sga/dcsid/eg bordeaux:33998:bordeaux :28/01/2008:
6403171:mindef/dga/det/etbs technique bourges:18021:bourges:25/01/2008:
6497716:etat/mindef/sga/sid/drg de rennes:49041:angers:28/02/2008:

[tmpfs]$ sed 's/:.*mindef[^:]*/:ministère de la défense/' plop
6406705:ministère de la défense:33998:bordeaux :28/01/2008:
6403171:ministère de la défense:18021:bourges:25/01/2008:
6497716:ministère de la défense:49041:angers:28/02/2008:

;-))
0
lami20j
 
Re,

Tu aurais pu garder le même raisonnement pour l'arrière ;-))

 sed 's/[^:]*mindef[^:]*/ministere de la defense/' mindef
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > lami20j
 
Oui mais j'ai raisonné en perlien, donc faignant, donc mon mien est plus court même avec le rajout du ":" dans la 2nd partie ;-))
0
lami20j > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Re,

C'est vrai ;-)
0
Utilisateur anonyme
 
merci à tous , bonne journée.
0