Script shell

Résolu/Fermé
TomTom - 29 oct. 2008 à 18:25
 TomTom - 29 oct. 2008 à 23:05
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
A voir également:

5 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
29 oct. 2008 à 21:18
[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
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
29 oct. 2008 à 18:29
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
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
Malgré les modifications faites, j'obtins toujours la même erreure... je ne comprends pas d'où celà peut venir...
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895 > TomTom
29 oct. 2008 à 20:03
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
#!/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
la variable $interdit est censé représenter le mot qui va être remplacé,dans le sed, par xxxx
0
cat ? je ne connais pas ^^ je suis vraiment débutant de chez débutant.... j'essaie ca tout de suite et merci encore
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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