Script shell

Résolu
TomTom -  
 TomTom -
Bonjour,

Je cherche à faire un programme en script shell. Ce programme a pour but de faire du traitement de fichiers. Par exemple, j'ai un fichier fichier1 qui contient un mot par ligne. J'ai un second fichier, fichier2, qui contient un texte. Je voudrais que mon programme parse fichier1 et qu'il remplace les mots de ce fichier dans fichier2.

Pour l'instant, j'ai le code suiant :

#!/bin/sh

while read ligne
do
    set -- $ligne
    if [ $1 -eq '/^ *$ ];
    then
        $censure=$1;
        sed 's/$interdit/xxxx/g' fichier2
    fi
done < fichier1


je remplace les mots du fichier1 par xxxx dans le fichier 2.

Quand je lance mon programme, j'obtiens une erreur suivante :
[: 11: Illegal number: mot1
[: 11: Illegal number: mot2
[: 11: Illegal number: mot3
[: 11: Illegal number: mot4

Je vous remercie par avance pour toutes vos aides que vous pourrez m'apporter
Configuration: Windows Vista
Internet Explorer 7.0

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    [rep]$ cat fichier1
    manger
    boire
    dormir
    
    [rep]$ cat fichier2
    Pour pouvoir être en bonne santé, il faut manger équilibré
    et boire une bouteille d'un litre et demi par jour. Il faut également
    avoir un sommeil profond. Donc pour bien dormir, un matelas de qualité
    est nécessaire.
    
    [rep]$ while read line;do sed -i "s/$line/xxx/" fichier2;done < fichier1
    
    [rep]$ cat fichier2
    Pour pouvoir être en bonne santé, il faut xxx équilibré
    et xxx une bouteille d'un litre et demi par jour. Il faut également
    avoir un sommeil profond. Donc pour bien xxx, un matelas de qualité
    est nécessaire.
    [rep]$
    ;-))
    1
  2. (Pabix) Messages postés 600 Statut Membre 81
     
    Bonjour, tu fais quelques erreurs assez graves :

    – sur la ligne if, tu n’as pas d’apostrophe fermante
    – une variable s’initialise en faisant censure="$1" et pas $censure=$1, ce qui produirait des erreurs
    – dans la ligne contenant la commande sed, puisque entre apostrophes simples, ta variable « interdit » ne sera pas remplacée, il faut utiliser des « " »

    d’autre part, si tu veux remplacer, avec sed, utilise l’option -i, qui fera une écriture dans le fichier. (Fais une copie de sauvegarde en début de script)

    Encadre TOUJOURS tes variables avec des guillemets doubles lorsque tu les références avec le $, sauf si tu as une bonne raison de ne pas le faire, ça t’évitera beaucoup de bogues inattendus lorsque tes variables contiendront des espaces.
    0
    1. TomTom
       
      Je te remercie beaucoup pour tes remarques sur mon code, je suis débutant comme tu as pu le constater... je mets mon fichier à jour par rapport à tes remarques, et je reviens :)
      0
    2. TomTom
       
      Malgré les modifications faites, j'obtins toujours la même erreure... je ne comprends pas d'où celà peut venir...
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > TomTom
         
        Salut,

        Déjà re-poste ton script avec les modifications.
        Ensuite, donnes nous le contenu (ou partie) de fichier1, ainsi que le contenu de fichier2.
        Si possible, donne un aperçu de fichier2 avant => après.

        Pour finir, tu définis une variable ($censure), ) quoi sert-elle ? Tu te sers aussi de la variable "$interdit", mais où est-elle définie ?
        0
  3. TomTom
     
    #!/bin/sh
    
    while read ligne
    do
        set -- $ligne
        if [ $1 -eq '/^ *$' ]
        then
            interdit="$1";
            sed"s/$interdit/xxxx/g" fichier2
        fi
    done < fichier1
    


    fichier 1 :
    manger
    boire
    dormir
    


    fichier2 :
    Pour pouvoir être en bonne santé, il faut manger équilibré
    et boire une bouteille d'un litre et demi par jour. Il faut également 
    avoir un sommeil profond. Donc pour bien dormir, un matelas de qualité 
    est nécessaire.
    


    Les fichiers 1 et 2 sont des exemples. Au final, je souhaiterais récupérer fichier2 dans la forme qui suit :
    Pour pouvoir être en bonne santé, il faut xxxx équilibré 
    et xxxx une bouteille d'un litre et demi par jour. Il faut également
    avoir un sommeil profond. Donc pour bien xxxx, un matelas de qualité est nécessaire.
    


    Encore merci de m'aider et de me consacrer du temps.
    0
    1. TomTom
       
      la variable $interdit est censé représenter le mot qui va être remplacé,dans le sed, par xxxx
      0
  4. TomTom
     
    cat ? je ne connais pas ^^ je suis vraiment débutant de chez débutant.... j'essaie ca tout de suite et merci encore
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. TomTom
     
    Merci, ca fait parfaitement ce que je désirais :)
    0