Sed en sortie sur fichier identique

Résolu/Fermé
anloanm Messages postés 2 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 5 février 2008 - 5 févr. 2008 à 10:27
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 6 févr. 2008 à 11:29
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

4 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 894
5 févr. 2008 à 10:46
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
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
6 févr. 2008 à 11:29
Merci ;-))
0
anloanm Messages postés 2 Date d'inscription mardi 5 février 2008 Statut Membre Dernière intervention 5 février 2008
5 févr. 2008 à 11:02
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
5 févr. 2008 à 11:08
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 jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
5 févr. 2008 à 11:14
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
5 févr. 2008 à 11:27
;-)
0