Sed en sortie sur fichier identique

Résolu
anloanm Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
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
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Merci ;-))
0
anloanm Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
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
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Hi,

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