Sed en sortie sur fichier identique

Résolu
anloanm Messages postés 3 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, j'ai une commande basique de sed pour Unix :

sed 's/MotSource/MotDestination/g' infile > outfile

le problème est que je voudrais que la modification se retrouve sur le même fichier bien entendue.

ex: sed 's/toto/titi/g' michel.txt > michel.txt

chaque fois fois je me retrouve avec un fichier vide.

Merci beaucoup pour toute aide.

PS : déjà essayé les astuces de commentcamarche et ailleurs + livres
Configuration: Windows XP / Unix
Internet Explorer 6.0

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Il te faut obligatoirement passer par un fichier temporaire :
    sed 's/toto/titi/g' < michel.txt > michel.tmp
    mv michel.tmp  michel.txt
    à moins d'avoir une version de "sed" supérieur à la 4.0.5 et bénéficier du switch "-i" (in-place), qui comme son nom l'indique modifie le fichier d'entrée "sur place" :
    sed -i.BAK 's/toto/titi/g'  michel.txt
    L'extension ".BAK" est facultative, elle permet de faire une sauvegarde de l'original...

    ;-))
    2
  2. anloanm
     
    Bien

    J'avais donc :

    sed '/COMPTAB/ s/Manual/Auto/' < dede.txt > dede.tmp && mv dede.tmp dede.txt

    et maintenant :

    fic=$(cat dede.txt);echo "$fic" | sed '/COMPTAB/ s/Manual/Auto/' > dede.txt

    les deux font la même chose mais l'approche est différente.

    Merci beaucoup

    anloanm
    1
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Merci ;-))
      0
  3. anloanm Messages postés 3 Statut Membre
     
    Salut,

    C'est exactement ce qu'il me fallait :

    sed 's/toto/titi/g' < michel.txt > michel.tmp | mv michel.tmp michel.txt

    Merci beaucoup pour ton aide rapide et efficace.

    anloanm
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Il te faut obligatoirement passer par un fichier temporaire :
    t'en es sûr ;-))
    root@debian:~# cat fichier.txt
    titi
    titi
    root@debian:~# fic=$(cat fichier.txt);echo "$fic" | sed 's/titi/toto/' > fichier.txt
    root@debian:~# cat fichier.txt
    toto
    toto
    root@debian:~# 
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Hi,

      Voui j'en suis sûr, enfin moins maintenant espèce de faux perlien à la noix ;-)))
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        ;-)
        0