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.
    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
      .
      .
      .
      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] $ 
        ;-))
        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 :)
          1. 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.
          2. 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
            $
            ;-))