Forum Programmation.shell modification de chaque fichier par une boucle

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-1
6
fév.
2017

Bonjour,

je me souviens plus trop la commande me permettant faire une modification sur chaque fichier se trouvant dans un répertoire. Après chaque modification écrit chaque fichier dans un autre répertoire.

Fichiersource=/file_source/
fichierudate=/file_update/

ls $Fichiersource
1.txt 2.txt 3.txt

old_mot=`cat $Fichiersource/*.txt | grep "MODO" | awk '{print $2}' | cut -d'"' -f2`
new_mot=BOBO
for i in $Fichiersource/*.txt
do
    cat $i | sed "s/$old_mot/$new_mot/ > $fichierudate
done

Voila mais ça fonctionne pas.
Le but il doit modifier le mot "MODO" par "BOBO" dans chaque fichier txt a chaque modification il écrit le fichier modifier dans le répertoire $fichierudate

Je me souviens plus trop comment faire…

Cordialement..

  • # je ne comprend pas tout

    Posté par  . Évalué à 2.

    je ne comprend pas tous le charabia au dessus de ta boucle

    avec le old_mot qui cherche MODO et nous sort uniquement la 2e colonne, pour n'en prendre que la 2e partie apres le "

    mais

    for i in $Fichiersource/*.txt
    do
        cat $i | sed "s/$old_mot/$new_mot/ > $fichierudate
    done

    fait exactement ce que tu demandes,
    sauf qu'avec le simple > tu effaces le fichier à chaque ecriture
    donc tu n'as plus alors que la derniere ligne ou le dernier fichier.

    il te faut peut-etre >> pour coller les 3 fichiers ensemble
    ou bien $fichierudate est un dossier (ce qui semble etre l'hypothese en debut du script) et il te manque une destination dans ce dossier
    par exemple > $fichierudate/$i
    qui va creer un fichier du meme nom que le fichier d'origine, mais dans le dossier

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.