Eine Sache ist zu beachten, sed
kann selbst keine Dateien schreiben, da der einzige Zweck von sed darin besteht, als Editor für den "Stream" zu fungieren (d.h. Pipelines von stdin, stdout, stderr und anderen >&n
Puffer, Steckdosen und dergleichen). In diesem Sinne können Sie einen anderen Befehl verwenden tee
um die Ausgabe zurück in die Datei zu schreiben. Eine andere Möglichkeit besteht darin, einen Patch zu erstellen, indem man den Inhalt in diff
.
Tee-Methode
sed '/regex/' <file> | tee <file>
Patch-Methode
sed '/regex/' <file> | diff -p <file> /dev/stdin | patch
UPDATE:
Beachten Sie auch, dass der Patch die Datei ab Zeile 1 der diff-Ausgabe ändern wird:
Patch braucht nicht zu wissen, auf welche Datei er zugreifen soll, da dies in der ersten Zeile der Ausgabe von diff steht:
$ 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