Coba gunakan sponge dari moreutils seperti ini:
sed "s/root/toor/" /etc/passwd | grep -v joey | sponge /etc/passwd
Itu mengumpulkan seluruh input sebelum menulis ke outputnya.
Saya kira sed mungkin masih membuat file temp, tetapi berikut ini mungkin melakukan apa yang Anda inginkan? (Menggunakan strace untuk ini mungkin menunjukkan kepada Anda apakah sed membuat file temp atau tidak).
sed -i '/bar/!d' foo.txt
Seruan membalikkan kecocokan, d untuk menghapus, jadi ini menghapus semua baris yang tidak memiliki bilah di dalamnya.