Ketik konten file, pipa beberapa tindakan dan kembalikan hasilnya

1

Apakah ada cara untuk melakukan sesuatu seperti ini:

cat somefile.txt | sort | uniq > somefile.txt

Yaitu saya ingin daftar seluruh file, kemudian pipa beberapa tindakan ke kontennya dan akhirnya mengembalikan hasilnya ke file sumber menimpa sepenuhnya. Untuk saat ini saya melakukannya dengan meletakkan output ke file sementara dan setelah itu memindahkannya ke yang asli. Saya ingin melakukannya dengan cara sederhana seperti memungkinkan perpipaan linux.

Shell ada bashdi Linux dan cmddi Windows jika itu penting.

Alex GP
sumber

Jawaban:

2

(menjawab untuk bash)
Tidak. Shell memproses pengalihan pertama, yang kemudian memotong file. Hanya kemudian catmulai, dan itu beroperasi dengan file kosong.

Ada alat yang disebut spongedalam moreutilspaket yang memungkinkan Anda melakukan ini:

cat somefile.txt | sort | uniq | sponge somefile.txt

Perintah ini dapat disederhanakan (menghapus UUOC ):

sort -u somefile.txt | sponge somefile.txt

Tanpa spongeAnda harus menulis ke file temp, dan jika perintah berhasil, timpa file input

tmpfile=$(mktemp)
sort -u somefile.txt > "$tmpfile" && mv "$tmpfile" somefile.txt
glenn jackman
sumber
1
spongeadalah jawaban umum, tetapi karena sort(tidak seperti kebanyakan utilitas) perlu buffer semua data sebelum mengeluarkan apapun (kecuali untuk -m), untuk kasus khusus ini Anda bisa sort -u -o somefile.txt somefile.txt.
dave_thompson_085
0

Anda dapat menggunakan Vim dalam mode Ex:

ex -sc 'sort u|x' somefile.txt
  1. sort u semacam unik

  2. x Simpan dan tutup

Steven Penny
sumber