Supprimer des chaines de caractere

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. re,

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

    echo cedex [0-9]*| sed 's/cedex [0-9]*//'|less
    0
    1. 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. 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. Modérateur
        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
      3. @jipicyRe,

        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
      4. @jipicyRe,

        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
    2. 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. 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
    3. 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
      1. 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. 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
      2. 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. 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
      3. 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
        1. Modérateur
          [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. Re,

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

             sed 's/[^:]*mindef[^:]*/ministere de la defense/' mindef
            0
          2. Modérateur
            @lami20jOui 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
          3. @jipicyRe,

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