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
Configuration: Windows XP Internet Explorer 7.0

10 réponses

  1. Utilisateur anonyme
     
    re,

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

    echo cedex [0-9]*| sed 's/cedex [0-9]*//'|less
    0
  2. 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
    1. 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
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      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
      1. 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
      2. 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
  3. 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
    1. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
    1. 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
  7. 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
    1. 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
  8. 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
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [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
    1. lami20j
       
      Re,

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

       sed 's/[^:]*mindef[^:]*/ministere de la defense/' mindef
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > 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
      2. lami20j > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Re,

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