2 votes

Pourquoi une redirection linux tronque le fichier ?

J'ai un fichier appelé "test.txt" comme ça :

hello world

c'est juste une chaîne "hello world". Si j'utilise une expression rationnelle en perl :

perl -pe "s/hello/bye/g" test.txt

il est dit :

bye world

mais si j'essaie de rediriger ce fichier vers lui-même :

perl -pe "s/hello/bye/g" test.txt > test.txt

le fichier résultant est vide. Pourquoi ? Et comment puis-je "filtrer" une expression rationnelle sur un fichier ?

3voto

Il ouvre le fichier en écriture en raison de la redirection avant que l'application n'ait la possibilité de le lire. Redirigez plutôt vers un fichier temporaire, puis renommez-le ensuite.

3voto

glglgl Points 35668

perl accepte le paramètre -i pour la mise en place. Avec cela, vous pouvez traiter un fichier avec un programme perl et le faire réécrire immédiatement.

2voto

lanzz Points 19475

La redirection a lieu pendant que votre shell analyse votre ligne de commande. Cela se produit avant que la commande réelle ne soit exécutée, et le fichier vers lequel vous redirigez est donc écrasé avant que vous n'ayez la possibilité de le lire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X