Contoh yang Anda sarankan (di bawah) tidak berfungsi karena Anda sebenarnya akan membaca dan menulis ke file yang sama secara bersamaan.
$ cat filename | sort | uniq > filename
Gagasan dengan pipa atau pengalihan adalah bahwa perintah di sisi kiri dan kanan setiap pipa atau pengalihan berjalan secara bersamaan, secara paralel. Perintah di sebelah kanan memproses informasi saat diserahkan dari perintah di sebelah kiri, sementara perintah di sebelah kiri masih berjalan.
Agar skenario Anda berfungsi, perintah yang membaca dari file harus selesai sebelum perintah yang menulis ke file dimulai. Agar ini berfungsi, Anda harus mengarahkan output ke lokasi sementara terlebih dahulu, kemudian setelah selesai, kirim kembali dari lokasi sementara kembali ke file.
Cara yang lebih baik untuk melakukan ini pada dasarnya adalah seperti pada contoh sebelumnya, di mana Anda mengarahkan ulang ke file sementara kemudian mengganti nama file itu kembali ke aslinya (kecuali bahwa Anda tidak perlu menghapus file terlebih dahulu, karena memindahkan menghapus target yang ada) .
$ cat filename | sort | uniq > result
$ mv -f result filename
Anda juga bisa menyimpannya ke dalam variabel string, kecuali itu hanya berfungsi ketika data cukup kecil untuk semua dapat disimpan dalam memori sekaligus.
echo $(cat filename | sort | uniq > result) > filename
atau sesuatu ? Hanya lewat, saya tidak punya waktu untuk mencobanya.