Une chose à noter, sed
ne peut pas écrire des fichiers sur son propre que le seul but de la sed est d'agir en tant que rédacteur sur le "flux" (c'est à dire les pipelines de stdin, stdout, stderr, et d'autres >&n
tampons, des sockets et des autres). Avec cela à l'esprit, vous pouvez utiliser une autre commande tee
d'écrire la sortie dans le fichier. Une autre option est de créer un patch à partir de la tuyauterie, le contenu en diff
.
Tee méthode
sed '/regex/' <file> | tee <file>
Patch méthode
sed '/regex/' <file> | diff -p <file> /dev/stdin | patch
Mise à JOUR:
Il est également à noter que le patch va obtenir le fichier à modifier de la ligne 1 de la diff de sortie:
Patch n'a pas besoin de savoir quels sont les fichiers à l'accès comme cela se trouve dans la première ligne de la sortie de diff:
$ echo foobar | tee fubar
$ sed 's/oo/u/' fubar | diff -p fubar /dev/stdin
*** fubar 2014-03-15 18:06:09.000000000 -0500
--- /dev/stdin 2014-03-15 18:06:41.000000000 -0500
***************
*** 1 ****
! foobar
--- 1 ----
! fubar
$ sed 's/oo/u/' fubar | diff -p fubar /dev/stdin | patch
patching file fubar