Satu hal yang perlu diperhatikan, sed
tidak dapat menulis file sendiri sebagai satu-satunya tujuan sed adalah untuk bertindak sebagai editor pada "aliran" (yaitu pipa stdin, stdout, stderr, dan >&n
buffer lain , soket dan sejenisnya). Dengan mengingat hal ini, Anda dapat menggunakan perintah lain tee
untuk menulis output kembali ke file. Pilihan lain adalah membuat tambalan dari menyalurkan konten ke dalamnya diff
.
Metode tee
sed '/regex/' <file> | tee <file>
Metode tambalan
sed '/regex/' <file> | diff -p <file> /dev/stdin | patch
MEMPERBARUI:
Juga, perhatikan bahwa tambalan akan membuat file berubah dari baris 1 dari output diff:
Tambalan tidak perlu tahu file mana yang akan diakses karena ini ditemukan di baris pertama dari keluaran dari 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
-i
adalah pilihan di gnu sed, tetapi tidak dalam sed standar. Namun, itu mengalirkan konten ke file baru dan kemudian mengganti nama file sehingga bukan yang Anda inginkan.