Attention: c'est une méthode dangereuse! Il abuse des tampons d'E / S sous Linux et avec des options spécifiques de mise en mémoire tampon, il parvient à travailler sur de petits fichiers. C'est une curiosité intéressante.Mais ne l'utilisez pas pour une situation réelle!
Outre l' -i
option de sed
vous pouvez utiliser l' tee
utilitaire .
De man
:
tee - lire à partir de l'entrée standard et écrire sur la sortie standard et les fichiers
Ainsi, la solution serait:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee | tee index.html
- ici le tee
est répété pour s'assurer que le pipeline est tamponné. Ensuite, toutes les commandes du pipeline sont bloquées jusqu'à ce qu'elles obtiennent une entrée sur laquelle travailler. Chaque commande du pipeline démarre lorsque les commandes en amont ont écrit 1 tampon d'octets (la taille est définie quelque part ) à l'entrée de la commande. Donc, la dernière commandetee index.html
, qui ouvre le fichier pour l'écriture et le vide donc, s'exécute après la fin du pipeline en amont et la sortie est dans le tampon dans le pipeline.
Les éléments suivants ne fonctionneront probablement pas:
sed s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html | tee index.html
- il exécutera les deux commandes du pipeline en même temps sans aucun blocage. (Sans bloquer, le pipeline doit passer les octets ligne par ligne au lieu de tampon par tampon. Comme lors de l'exécution cat | sed s/bar/GGG/
. Sans blocage, il est plus interactif et généralement les pipelines de seulement 2 commandes s'exécutent sans mise en mémoire tampon et blocage. Les pipelines plus longs sont mis en mémoire tampon.) La tee index.html
volonté ouvrez le fichier pour l'écriture et il sera vidé. Cependant, si vous activez toujours la mise en mémoire tampon, la deuxième version fonctionnera également.
perl -pi -w -e 's/STRING_TO_REPLACE/REPLACE_WITH/g;' index.html