Script shell

Bonjour,
j'ai un fichier qui contient les lignes ci-aprés :

nom1(famille1/X/famille2/Y/famille3/A|)
nom2(famille1/X/famille2/Y/famille3/B|)
nom1(famille1/X/famille5/Y/famille3/C|)
nom2(famille1/X/famille5/Y/famille3/D|)

J'ai besoin de récupérer tout ce qui entre parenthèses sous forme de paramètres en utilisant le shell unix.
Ex :
(famille1/X/famille2/Y/famille3/A|)
param1 : famille1
param2 : X
param3 : famille2
param4 : Y
param5 : famille2
param6 : A

Merci d'avance pour votre aide.
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. Contributeur sécurité
    Bonjour,
    essaye d'utiliser la commande "cut" :

    cut - famille1 - X > tempo --> ici tu récupère les champ famille1 et X dans le dossier tempo

    mais ce n'est pas complet tu veux maintenant les afficher. Essaye avec read sur des valeurs que tu définies, tu les rappelles.
    0
    1. je serais toi je mettrais le contenu du fichier dans une variable chaine de caractère et après je découperé la chaine de caractère:
      par exemple un fichier texte qui contient 7 paramètre: (1/2/3/4/5/6/7)

      #mettre la chaine de caractères dans une variable
      variable=$(cat fichier.txt)

      param1=${variable%/*} #6 fois pour récupérer que le param1 (boucle for)

      param2=${variable%/*} #5 fois pour récupérer que le param1 et le 2
      param2=${variable#*/} #1 fois pour avoir que le 2

      param3=${variable%/*} #4 fois pour récupérer que le param1 et le 2
      param3=${variable#*/} #2 fois pour avoir que le 2
      .
      .
      .
      0
      1. Modérateur
        Salut,

        Une piste :
        [trash] $ echo $var
        nom1(famille1/X/famille2/Y/famille3/A|)
        
        [trash] $ echo $var | sed 's#.*(\(.*\)|)#\1#;s#/# #g'
        famille1 X famille2 Y famille3 A
        
        [trash] $ set $(echo $var | sed 's#.*(\(.*\)|)#\1#;s#/# #g')
        
        [trash] $ echo "                                       
        Param1 = $1
        Param2 = $2
        Param3 = $3
        Param4 = $4
        Param5 = $5
        Param6 = $6"
        
        Param1 = famille1
        Param2 = X
        Param3 = famille2
        Param4 = Y
        Param5 = famille3
        Param6 = A
        
        [trash] $ 
        ;-))
        0
        1. Merci bcp jipicy, t'est tjs le meilleur ;)
          0
          1. Bonjour,
            En fait, j'ai un petit problème avec le sed :(. Les expressions ci-dessous peuvent contenir du texte aprés le "|"

            nom1(famille1/X/famille2/Y/famille3/A|dfd)
            nom2(famille1/X/famille2/Y/famille3/B|fffff)
            nom1(famille1/X/famille5/Y/famille3/C|)
            nom2(famille1/X/famille5/Y/famille3/D|)

            Le résultat devient :

            Param1 = nom1(famille1
            Param2 = X
            Param3 = famille2
            Param4 = Y
            Param5 = famille3
            Param6 = A|dfd

            Merci pr votre aide :)
            0
            1. Modérateur
              sed 's#.*(\(.*\)|.*)#\1#;s#/# #g'
              ;-))
              0
              1. Merci bcp jipycy :)
                0
            2. Bonjour jipycy,

              E fait, j'ai le script suivant élaboré avec ton aide :
              -------------------------------------------------------------------------------------------------------
              while true
              do
              clear
              for ligne in `cat $fichier2`; do
              set $(echo $ligne | sed 's#.*(\(.*\)|.*)#\1#;s#/# #g')
              echo ""
              echo " "$i". famille1: "$2 "| famille2: "$4 "| famille3: "$6
              i=`expr $i + 1`
              done

              echo "

              Votre choix : \c choix"
              read choix

              case "$choix" in
              "0" )
              exit;;

              "variable" ) echo "choix 1"
              ;;

              "variable" ) echo "choix 2"
              ;;
              etc...

              esac

              done
              -----------------------------------------------------------------------------------------------

              sachant que le fichier2 contient :

              nom1(famille1/X/famille2/Y/famille3/A|dfd)
              nom2(famille1/X/famille2/Y/famille3/B|fffff)
              nom1(famille1/X/famille5/Y/famille3/C|)
              nom2(famille1/X/famille5/Y/famille3/D|)
              etc...

              Je voudrai que le script affiche l'ensemble des familles contenues dans le fichier dynamiquement avec un numéroà savoir le $i et que l'uilisateur ait la possiblité de faire son choix (variable) parmi ceux affiché dynamiquement.

              Merci d'avance.
              0
              1. s
                0
            3. Modérateur
              Inspires-toi de cette excellente réponse de jisisv... ;-))
              0
              1. J'utilise le korn shell, et ça n'a pas l'air de marcher pour moi :(.
                0
            4. Modérateur
              $ set -A mon_tableau élément1 élément2 élément3
              $ echo ${mon_tableau[1]}
              élément2
              $ echo ${mon_tableau[0]}
              élément1
              $ echo ${mon_tableau[*]}
              élément1 élément2 élément3
              $ echo ${#mon_tableau[*]}
              3
              $
              ;-))
              0