Découper chaîne de caractères en shell située devant chaîne

Résolu

Bonjour, j'ai un fichier qui contient des enregistrements de la forme suivante:

ib64x11-devel-1.7.0-1.4.mga
lib64ass-devel-0.15.1-1.mga
lib64boost-static-devel-1.75.0-1.mga
lib64avahi-common-devel-0.8-6.3.mga

pour chaque enregistrement je voudrais extraire tous les caractères situés devant la chaîne "-devel"  pour obtenir ceci:

lib64x11
lib64ass
lib64boost-static
lib64avahi-common

Comment faire en shell ? cut, sed, awk, tr  etc ...

Merci pour votre aide.
 

5 réponses

  1. Modérateur

    Bonjour,

    sed 's/-devel.*//' ficin.txt >ficout.txt

    Même si sur le principe awk serait meilleur, mais il y a longtemps que j'ai oublié la syntaxe




    0
    1. Bonjour, ah oui super merci jee pee c'est exactement ce que je voulais. Super

      0
      1. Contributeur

        hello

        $ awk -F "-" '{print $1}' fichier
        ib64x11
        lib64ass
        lib64boost
        lib64avahi
        
        0
        1. Modérateur

          merci, effectivement la syntaxe reste simple

          le véritable séparateur étant "-devel", est-ce que

          $ awk -F "-devel" '{print $1}' fichier

          fonctionne ?

          0
        2. Contributeur
          @jee pee

          oui
          mon code est faux

          $ awk -F "-devel" '{print $1}' fichier
          ib64x11
          lib64ass
          lib64boost-static
          lib64avahi-common
          
          0
      2. Contributeur

        en shell

        $ while read a; do echo ${a%%-?*}; done < fichier
        ib64x11
        lib64ass
        lib64boost
        lib64avahi
        
        0
        1. Contributeur

          correction :

          $ while read a; do echo ${a%%-devel?*}; done < fichier
          ib64x11
          lib64ass
          lib64boost-static
          lib64avahi-common
          
          0
      3. Bonjour, merci à tous, tout foncyionne.

        0